@unotest/web 0.9.0 → 0.9.1

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.
@@ -391,21 +391,32 @@ function test_dashboard_loads_with_widgets() {
391
391
  ## Failure recovery
392
392
 
393
393
  `paused-failure` from `run_test` keeps the browser context alive and
394
- the runtime addressable by `runtimeId`. Use the diagnostic tools:
394
+ the runtime addressable by `runtimeId`. `run_test` also auto-attaches
395
+ you to that live page, so `get_page_snapshot` / `find_element` /
396
+ `check_locator` already target the page being debugged — no manual
397
+ `attach_debug_session`. Use the diagnostic tools:
395
398
 
396
399
  1. **`inspect_runtime { runtimeId }`** — `lastFailure` (error + line/col
397
400
  + AST node) + `vars` (every assignment up to the pause). Tells you
398
401
  what was observed vs expected and the state the scenario built.
399
- 2. **`get_page_snapshot { }`** — current page outline. Look for whether
402
+ 2. **`check_locator { locator }`** — paste the EXACT locator from the
403
+ failing line (e.g. `getByRole('row').filter({hasText:'Uma Quinn'}).first()`).
404
+ Reports, against the live paused page, how many elements it matches
405
+ and — when the chain ends in `.first()`/`.last()`/`.nth()` —
406
+ `pinned.ofCount`, the count that index op silently collapsed (a
407
+ `.first()` hiding 16 identical rows is the classic break), plus
408
+ per-match role/name/text/testId. Verify a selector at runtime
409
+ instead of guessing or re-running the whole test.
410
+ 3. **`get_page_snapshot { }`** — current page outline. Look for whether
400
411
  the locator is reachable, or whether the page navigated somewhere
401
412
  unexpected.
402
- 3. **`list_failures` + `get_failure_console` / `get_failure_trace` /
413
+ 4. **`list_failures` + `get_failure_console` / `get_failure_trace` /
403
414
  `get_failure_network`** — failure bundle. `get_failure_console` is
404
415
  often the giveaway when the failure is really a runtime error in
405
416
  the app.
406
- 4. **`agent_fix { runId }`** — composes a structured fix-context
417
+ 5. **`agent_fix { runId }`** — composes a structured fix-context
407
418
  prompt. **It does NOT patch your code** (D-25); you apply edits.
408
- 5. **`open_viewer { }`** — boots the localhost viewer for the project
419
+ 6. **`open_viewer { }`** — boots the localhost viewer for the project
409
420
  if it isn't running, returns its URL. The viewer renders the block-
410
421
  tree of the failing scenario with live status, plus a log-tail of
411
422
  the child runner's stdio. Useful when you want a human (or yourself)
@@ -462,6 +473,10 @@ no recording.
462
473
  Every locator must resolve to exactly one element. When you see
463
474
  `getByRole('row', {name: 'X'}) resolved to 301 elements`:
464
475
 
476
+ - **`check_locator { locator }`** (when a browser is live) — paste the
477
+ chain and it tells you the exact `count` and, for a `.first()`/`.nth()`
478
+ chain, `pinned.ofCount` (how many it collapsed). The fastest way to
479
+ confirm a locator is over-matching and by how much, without re-running.
465
480
  - Narrow the `name` to a uniquely-identifying substring. `name`
466
481
  substring-matches: pick wording that hits only one row (a header's
467
482
  full label `"Pending (300)"` or a row-specific ID like `"573"`).
@@ -469,7 +484,7 @@ Every locator must resolve to exactly one element. When you see
469
484
  to skip manual disambiguation — scoped search returns the single ref
470
485
  directly.
471
486
  - Only use `.first()` / `.nth(N)` when the position itself is the
472
- semantic anchor.
487
+ semantic anchor — and `check_locator` shows `pinned.ofCount === 1`.
473
488
 
474
489
  ## Anti-patterns
475
490
 
package/CHANGELOG.md CHANGED
@@ -5,6 +5,41 @@ All notable changes to `@unotest/web` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.9.1] - 2026-06-14
9
+
10
+ ### Added
11
+
12
+ - **`check_locator` MCP tool + runtime locator probe.** Evaluate a DSL locator
13
+ string against the live page and see what it actually matches — count, the N a
14
+ trailing `.first()`/`.last()`/`.nth()` silently collapsed, and where each match
15
+ points — instead of guessing or re-running the whole test. Same parser/core
16
+ (`probe-locator`) the runner uses, so a result here equals the runtime locator.
17
+ - **Interactive debug + auto-attach.** `run_test --debug` auto-attaches the MCP
18
+ session to the paused run's shared browser, so `get_page_snapshot` /
19
+ `find_element` / `check_locator` hit the page being debugged. Collaborative
20
+ `probe` command (the human's `check_locator` twin) is handled by the runner.
21
+ - **Agent tool calls in the viewer's System console.** A new `StepsToolEventSink`
22
+ publishes each MCP tool call + result (secret-redacted, capped) into the
23
+ attached run's `steps.jsonl`, so the human sees what the agent is doing.
24
+ - **Run breakpoints published to `runtime.json`** (`.debugger.json` seed +
25
+ `--breakpoints` override), so the viewer paints gutter dots for non-persisted
26
+ breakpoints.
27
+
28
+ ### Changed
29
+
30
+ - **Shared runner machinery extracted to `@unotest/core`** (run-artifact /
31
+ run-manifest / runtime-state writers, debug-commands watcher, env reader) and
32
+ consumed via thin web bindings.
33
+
34
+ ### Fixed
35
+
36
+ - **`abort` now actually terminates a paused run.** A `{cmd:abort}` on a run
37
+ paused mid-statement could not unwind the suspended executor, leaving the
38
+ process + headed browser alive with a fresh heartbeat (the viewer showed a
39
+ ghost "active" session). Abort now force-terminates the runner the same clean
40
+ way Ctrl-C / SIGTERM does, emitting a terminal `run:finished` and closing the
41
+ browser.
42
+
8
43
  ## [0.9.0] - 2026-06-11
9
44
 
10
45
  ### Added
@@ -90,19 +90,19 @@ declare const FailureBundleConfigSchema: z.ZodObject<{
90
90
  type FailureBundleConfig = z.infer<typeof FailureBundleConfigSchema>;
91
91
  declare const DialogPolicySchema: z.ZodEnum<["accept", "dismiss", "manual"]>;
92
92
  type DialogPolicy = z.infer<typeof DialogPolicySchema>;
93
- declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:dsl"]>;
93
+ declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>;
94
94
  type LinterRuleId = z.infer<typeof LinterRuleIdSchema>;
95
95
  declare const LinterSeveritySchema: z.ZodEnum<["off", "warn", "error"]>;
96
96
  type LinterSeverity = z.infer<typeof LinterSeveritySchema>;
97
97
  declare const LinterConfigSchema: z.ZodObject<{
98
98
  enabled: z.ZodBoolean;
99
- rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:dsl"]>, z.ZodEnum<["off", "warn", "error"]>>;
99
+ rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
100
100
  }, "strip", z.ZodTypeAny, {
101
101
  enabled: boolean;
102
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
102
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
103
103
  }, {
104
104
  enabled: boolean;
105
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
105
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
106
106
  }>;
107
107
  type LinterConfig = z.infer<typeof LinterConfigSchema>;
108
108
  declare const McpConfigSchema: z.ZodObject<{
@@ -133,8 +133,67 @@ declare const SandboxConfigSchema: z.ZodObject<{
133
133
  apiBaseUrl?: string | undefined;
134
134
  }>;
135
135
  type SandboxConfig = z.infer<typeof SandboxConfigSchema>;
136
+ declare const WebServerConfigSchema: z.ZodObject<{
137
+ /** Shell command that starts the app under test (`npm run dev`,
138
+ * `python manage.py runserver`, …). Runs in the user's shell from the
139
+ * project root. */
140
+ command: z.ZodString;
141
+ /** URL probed for readiness — any HTTP response counts as up. Usually
142
+ * equals `baseUrl`; declared explicitly because a dev server may
143
+ * answer on a different path/port than the tests navigate to. */
144
+ url: z.ZodString;
145
+ /** When the URL is already up, reuse that server instead of spawning a
146
+ * second one (default true — covers a dev server the user or the
147
+ * viewer already started). `false` makes an occupied URL an error,
148
+ * Playwright-style for CI strictness. */
149
+ reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
150
+ /** How long to wait for the URL to come up after spawning. */
151
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
152
+ }, "strip", z.ZodTypeAny, {
153
+ command: string;
154
+ url: string;
155
+ reuseExistingServer: boolean;
156
+ timeoutMs: number;
157
+ }, {
158
+ command: string;
159
+ url: string;
160
+ reuseExistingServer?: boolean | undefined;
161
+ timeoutMs?: number | undefined;
162
+ }>;
163
+ type WebServerConfig = z.infer<typeof WebServerConfigSchema>;
136
164
  declare const UnotestConfigSchema: z.ZodObject<{
137
165
  baseUrl: z.ZodOptional<z.ZodString>;
166
+ /** Dev-server lifecycle for the app under test (M-12). Unset → the app
167
+ * is expected to be running already (current behaviour). When set, the
168
+ * CLI ensures it per run; `npx @unotest/web app-server` / the viewer
169
+ * hold a long-lived instance and runs then reuse it. */
170
+ webServer: z.ZodOptional<z.ZodObject<{
171
+ /** Shell command that starts the app under test (`npm run dev`,
172
+ * `python manage.py runserver`, …). Runs in the user's shell from the
173
+ * project root. */
174
+ command: z.ZodString;
175
+ /** URL probed for readiness — any HTTP response counts as up. Usually
176
+ * equals `baseUrl`; declared explicitly because a dev server may
177
+ * answer on a different path/port than the tests navigate to. */
178
+ url: z.ZodString;
179
+ /** When the URL is already up, reuse that server instead of spawning a
180
+ * second one (default true — covers a dev server the user or the
181
+ * viewer already started). `false` makes an occupied URL an error,
182
+ * Playwright-style for CI strictness. */
183
+ reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
184
+ /** How long to wait for the URL to come up after spawning. */
185
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
186
+ }, "strip", z.ZodTypeAny, {
187
+ command: string;
188
+ url: string;
189
+ reuseExistingServer: boolean;
190
+ timeoutMs: number;
191
+ }, {
192
+ command: string;
193
+ url: string;
194
+ reuseExistingServer?: boolean | undefined;
195
+ timeoutMs?: number | undefined;
196
+ }>>;
138
197
  browsers: z.ZodArray<z.ZodEnum<["chromium", "firefox", "webkit"]>, "many">;
139
198
  channel: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"chrome">, z.ZodLiteral<"msedge">, z.ZodLiteral<"chrome-beta">, z.ZodNull]>>;
140
199
  viewport: z.ZodObject<{
@@ -228,13 +287,13 @@ declare const UnotestConfigSchema: z.ZodObject<{
228
287
  defaultNavigationTimeoutMs: z.ZodNumber;
229
288
  linter: z.ZodObject<{
230
289
  enabled: z.ZodBoolean;
231
- rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:dsl"]>, z.ZodEnum<["off", "warn", "error"]>>;
290
+ rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
232
291
  }, "strip", z.ZodTypeAny, {
233
292
  enabled: boolean;
234
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
293
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
235
294
  }, {
236
295
  enabled: boolean;
237
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
296
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
238
297
  }>;
239
298
  mcp: z.ZodObject<{
240
299
  transport: z.ZodLiteral<"stdio">;
@@ -292,7 +351,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
292
351
  defaultNavigationTimeoutMs: number;
293
352
  linter: {
294
353
  enabled: boolean;
295
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
354
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
296
355
  };
297
356
  mcp: {
298
357
  transport: "stdio";
@@ -303,6 +362,12 @@ declare const UnotestConfigSchema: z.ZodObject<{
303
362
  apiBaseUrl?: string | undefined;
304
363
  };
305
364
  baseUrl?: string | undefined;
365
+ webServer?: {
366
+ command: string;
367
+ url: string;
368
+ reuseExistingServer: boolean;
369
+ timeoutMs: number;
370
+ } | undefined;
306
371
  channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
307
372
  storageState?: string | undefined;
308
373
  }, {
@@ -335,7 +400,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
335
400
  defaultNavigationTimeoutMs: number;
336
401
  linter: {
337
402
  enabled: boolean;
338
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:dsl", "off" | "warn" | "error">>;
403
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
339
404
  };
340
405
  mcp: {
341
406
  transport: "stdio";
@@ -346,6 +411,12 @@ declare const UnotestConfigSchema: z.ZodObject<{
346
411
  apiBaseUrl?: string | undefined;
347
412
  };
348
413
  baseUrl?: string | undefined;
414
+ webServer?: {
415
+ command: string;
416
+ url: string;
417
+ reuseExistingServer?: boolean | undefined;
418
+ timeoutMs?: number | undefined;
419
+ } | undefined;
349
420
  channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
350
421
  storageState?: string | undefined;
351
422
  }>;
@@ -353,4 +424,4 @@ type UnotestConfig = z.infer<typeof UnotestConfigSchema>;
353
424
  type UnotestConfigInput = z.input<typeof UnotestConfigSchema>;
354
425
  declare const DEFAULT_CONFIG: UnotestConfig;
355
426
 
356
- export { type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, type SandboxConfig, SandboxConfigSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema };
427
+ export { type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, type SandboxConfig, SandboxConfigSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema, type WebServerConfig, WebServerConfigSchema };
@@ -1 +1 @@
1
- var _0x2f4e9c=_0x5088;function _0x5088(_0x35ba0f,_0x4f1556){_0x35ba0f=_0x35ba0f-0x16f;var _0x5f0c45=_0x5f0c();var _0x5088d1=_0x5f0c45[_0x35ba0f];if(_0x5088['NVKkTr']===undefined){var _0x16a1af=function(_0x451af3){var _0x5b4805='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5b9d04='',_0x2f88a3='';for(var _0x2a8880=0x0,_0x47feb8,_0x17d054,_0xf51d57=0x0;_0x17d054=_0x451af3['charAt'](_0xf51d57++);~_0x17d054&&(_0x47feb8=_0x2a8880%0x4?_0x47feb8*0x40+_0x17d054:_0x17d054,_0x2a8880++%0x4)?_0x5b9d04+=String['fromCharCode'](0xff&_0x47feb8>>(-0x2*_0x2a8880&0x6)):0x0){_0x17d054=_0x5b4805['indexOf'](_0x17d054);}for(var _0x541710=0x0,_0x483552=_0x5b9d04['length'];_0x541710<_0x483552;_0x541710++){_0x2f88a3+='%'+('00'+_0x5b9d04['charCodeAt'](_0x541710)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2f88a3);};_0x5088['FAqgnd']=_0x16a1af,_0x5088['wLKUZH']={},_0x5088['NVKkTr']=!![];}var _0x3990bf=_0x5f0c45[0x0],_0xd91f61=_0x35ba0f+_0x3990bf,_0x242047=_0x5088['wLKUZH'][_0xd91f61];return!_0x242047?(_0x5088d1=_0x5088['FAqgnd'](_0x5088d1),_0x5088['wLKUZH'][_0xd91f61]=_0x5088d1):_0x5088d1=_0x242047,_0x5088d1;}(function(_0x3cce67,_0x192c32){var _0x1e21ad={_0x2d54de:0x19d,_0x7f5c28:0x18f,_0x24a64e:0x191,_0x3b1c32:0x189,_0x1cd0d0:0x170,_0x3f11e4:0x17d,_0x1737a5:0x198},_0x44a598=_0x5088,_0x4ef498=_0x3cce67();while(!![]){try{var _0x21ddfd=parseInt(_0x44a598(_0x1e21ad._0x2d54de))/0x1*(-parseInt(_0x44a598(0x18b))/0x2)+parseInt(_0x44a598(_0x1e21ad._0x7f5c28))/0x3*(-parseInt(_0x44a598(_0x1e21ad._0x24a64e))/0x4)+parseInt(_0x44a598(_0x1e21ad._0x3b1c32))/0x5+-parseInt(_0x44a598(0x184))/0x6*(parseInt(_0x44a598(0x180))/0x7)+-parseInt(_0x44a598(_0x1e21ad._0x1cd0d0))/0x8+parseInt(_0x44a598(0x188))/0x9+-parseInt(_0x44a598(_0x1e21ad._0x3f11e4))/0xa*(-parseInt(_0x44a598(_0x1e21ad._0x1737a5))/0xb);if(_0x21ddfd===_0x192c32)break;else _0x4ef498['push'](_0x4ef498['shift']());}catch(_0x4efa28){_0x4ef498['push'](_0x4ef498['shift']());}}}(_0x5f0c,0xeb7d9));import{z}from'zod';function _0x5f0c(){var _0x49077b=['BgLUDdPZy2vUyxjPBY1PBI1YB290','mta0nZC0mdbxCfHszhO','BNvTyMvY','BNvSBa','C3rYAw5N','Cg9ZAxrPDMu','zw51Bq','yxjYyxK','B2jQzwn0','BgLUDdP4Cgf0Aa','zxjYB3i','lNvUB3rLC3qVzMfPBhvYzxm','ywnJzxb0','zMLYzwzVEa','mtmZmtCWvMH4rfDe','BxnLzgDL','CMvJB3jK','mteYnJK5m0rszvHAuW','Aw50','zgLZBwLZCW','DxjS','mZztA3rfyNC','D2vIA2L0','DMfSAwrHDg9YoMrZBa','BgLUDdPKzwvWlwnZCW','mtmYntu2mtrrv2zcEwW','ndKXnZmZmfDKy296yq','Bwf4','nde3nfjdzuDMBa','y2HYB21L','BwfUDwfS','zgvMyxvSDa','nMjNv2TREa','y2HYB21PDw0','nde3mtC2DenLrgPw','y3jHC2G','Dw5PB24','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','BgLUDdPKAxnHBwjPzY1IEs1PBMrLEa','BgLUDdPTDxn0ywnOzs1PBI1KC2W','odi1tLndwK1n','B2zM','D2fYBG','DhjHBNnPzw50','BMv0D29YAW','m1nYDxnfAa','C3rKAw8','BgL0zxjHBa','BwLU','B3b0Aw9UywW','yM9VBgvHBG','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','Dw5VDgvZDc9LmMuVx2HLBhbLCNm'];_0x5f0c=function(){return _0x49077b;};return _0x5f0c();}var BrowserSchema=z[_0x2f4e9c(0x175)]([_0x2f4e9c(0x190),_0x2f4e9c(0x17c),_0x2f4e9c(0x185)]),BrowserChannelSchema=z[_0x2f4e9c(0x193)]([z[_0x2f4e9c(0x19f)](_0x2f4e9c(0x18c)),z[_0x2f4e9c(0x19f)](_0x2f4e9c(0x17e)),z[_0x2f4e9c(0x19f)]('chrome-beta'),z[_0x2f4e9c(0x172)]()])[_0x2f4e9c(0x1a1)](),ViewportSchema=z[_0x2f4e9c(0x177)]({'width':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()[_0x2f4e9c(0x174)](),'height':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()[_0x2f4e9c(0x174)]()}),RetryReasonSchema=z[_0x2f4e9c(0x175)]([_0x2f4e9c(0x19b),_0x2f4e9c(0x19c),_0x2f4e9c(0x192)]),RetryConfigSchema=z[_0x2f4e9c(0x177)]({'count':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()['min'](0x0)[_0x2f4e9c(0x18a)](0xa),'on':z[_0x2f4e9c(0x176)](RetryReasonSchema)}),FailureBundleConfigSchema=z['object']({'tier1':z[_0x2f4e9c(0x19f)](!![])[_0x2f4e9c(0x18e)](!![]),'tier2':z['boolean'](),'tier3':z[_0x2f4e9c(0x177)]({'network':z[_0x2f4e9c(0x1a2)](),'video':z['boolean']()}),'retention':z[_0x2f4e9c(0x177)]({'runs':z['number']()[_0x2f4e9c(0x181)]()[_0x2f4e9c(0x174)](),'days':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()['positive']()}),'storageDir':z[_0x2f4e9c(0x173)]()[_0x2f4e9c(0x1a0)](0x1)}),DialogPolicySchema=z['enum']([_0x2f4e9c(0x17b),_0x2f4e9c(0x182),_0x2f4e9c(0x18d)]),LinterRuleIdSchema=z['enum']([_0x2f4e9c(0x187),_0x2f4e9c(0x178),_0x2f4e9c(0x1a3),'lint:pause-explicit',_0x2f4e9c(0x196),_0x2f4e9c(0x194),_0x2f4e9c(0x16f),_0x2f4e9c(0x197),_0x2f4e9c(0x195),_0x2f4e9c(0x186)]),LinterSeveritySchema=z[_0x2f4e9c(0x175)](['off',_0x2f4e9c(0x19a),_0x2f4e9c(0x179)]),LinterConfigSchema=z[_0x2f4e9c(0x177)]({'enabled':z[_0x2f4e9c(0x1a2)](),'rules':z[_0x2f4e9c(0x17f)](LinterRuleIdSchema,LinterSeveritySchema)}),McpConfigSchema=z[_0x2f4e9c(0x177)]({'transport':z[_0x2f4e9c(0x19f)](_0x2f4e9c(0x19e))}),SandboxConfigSchema=z[_0x2f4e9c(0x177)]({'shellCwd':z[_0x2f4e9c(0x173)]()['optional'](),'database':z[_0x2f4e9c(0x173)]()[_0x2f4e9c(0x1a1)](),'apiBaseUrl':z[_0x2f4e9c(0x173)]()[_0x2f4e9c(0x183)]()[_0x2f4e9c(0x1a1)]()}),UnotestConfigSchema=z[_0x2f4e9c(0x177)]({'baseUrl':z[_0x2f4e9c(0x173)]()[_0x2f4e9c(0x183)]()[_0x2f4e9c(0x1a1)](),'browsers':z['array'](BrowserSchema)[_0x2f4e9c(0x1a0)](0x1),'channel':BrowserChannelSchema,'viewport':ViewportSchema,'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':z['string']()[_0x2f4e9c(0x1a1)](),'testDir':z['string']()['min'](0x1),'helpersDir':z[_0x2f4e9c(0x173)]()[_0x2f4e9c(0x1a0)](0x1),'defaultTimeoutMs':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()[_0x2f4e9c(0x174)](),'defaultNavigationTimeoutMs':z[_0x2f4e9c(0x171)]()[_0x2f4e9c(0x181)]()[_0x2f4e9c(0x174)](),'linter':LinterConfigSchema,'mcp':McpConfigSchema,'sandbox':SandboxConfigSchema}),DEFAULT_CONFIG={'browsers':['chromium'],'viewport':{'width':0x500,'height':0x2d0},'retry':{'count':0x0,'on':[_0x2f4e9c(0x19b)]},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x2f4e9c(0x17a)},'dialogPolicy':_0x2f4e9c(0x17b),'testDir':'unotest/e2e','helpersDir':_0x2f4e9c(0x1a4),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x3a98,'linter':{'enabled':!![],'rules':{'lint:deep-css':_0x2f4e9c(0x19a),'lint:xpath':'warn','lint:obfuscated-class':'warn','lint:pause-explicit':_0x2f4e9c(0x19a),'lint:disambig-by-index':_0x2f4e9c(0x199),'lint:evaluate-discouraged':_0x2f4e9c(0x19a),'lint:scenario-in-root':_0x2f4e9c(0x179),'lint:mustache-in-dsl':_0x2f4e9c(0x179),'validator:unknown-function':_0x2f4e9c(0x179),'validator:dsl':_0x2f4e9c(0x179)}},'mcp':{'transport':'stdio'},'sandbox':{}};export{BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,RetryConfigSchema,RetryReasonSchema,SandboxConfigSchema,UnotestConfigSchema,ViewportSchema};
1
+ var _0x4b4ff9=_0x31c8;(function(_0x4ef68e,_0x2ff5c6){var _0x3f1675={_0x3a326e:0x163,_0x54f536:0x18c,_0x166f0e:0x16e,_0x4e62de:0x184,_0x3312cb:0x15e,_0x1e47d2:0x17b},_0x3988c2=_0x31c8,_0x4ac811=_0x4ef68e();while(!![]){try{var _0x4564cd=-parseInt(_0x3988c2(0x17d))/0x1*(-parseInt(_0x3988c2(0x186))/0x2)+parseInt(_0x3988c2(_0x3f1675._0x3a326e))/0x3+-parseInt(_0x3988c2(_0x3f1675._0x54f536))/0x4*(parseInt(_0x3988c2(0x166))/0x5)+parseInt(_0x3988c2(_0x3f1675._0x166f0e))/0x6+parseInt(_0x3988c2(_0x3f1675._0x4e62de))/0x7*(parseInt(_0x3988c2(_0x3f1675._0x3312cb))/0x8)+parseInt(_0x3988c2(0x15c))/0x9*(-parseInt(_0x3988c2(0x18b))/0xa)+-parseInt(_0x3988c2(_0x3f1675._0x1e47d2))/0xb*(parseInt(_0x3988c2(0x160))/0xc);if(_0x4564cd===_0x2ff5c6)break;else _0x4ac811['push'](_0x4ac811['shift']());}catch(_0x403cfa){_0x4ac811['push'](_0x4ac811['shift']());}}}(_0x3422,0x1f3c5));function _0x31c8(_0xed4411,_0x2de1dd){_0xed4411=_0xed4411-0x150;var _0x342232=_0x3422();var _0x31c863=_0x342232[_0xed4411];if(_0x31c8['zKgNuR']===undefined){var _0xe1f7d7=function(_0x15c9b7){var _0x2fcc8a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x2f850d='',_0x3b47d0='';for(var _0x48180b=0x0,_0x2a6cd7,_0x3b96a7,_0x41d138=0x0;_0x3b96a7=_0x15c9b7['charAt'](_0x41d138++);~_0x3b96a7&&(_0x2a6cd7=_0x48180b%0x4?_0x2a6cd7*0x40+_0x3b96a7:_0x3b96a7,_0x48180b++%0x4)?_0x2f850d+=String['fromCharCode'](0xff&_0x2a6cd7>>(-0x2*_0x48180b&0x6)):0x0){_0x3b96a7=_0x2fcc8a['indexOf'](_0x3b96a7);}for(var _0x2c34b8=0x0,_0x3d7d2e=_0x2f850d['length'];_0x2c34b8<_0x3d7d2e;_0x2c34b8++){_0x3b47d0+='%'+('00'+_0x2f850d['charCodeAt'](_0x2c34b8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3b47d0);};_0x31c8['BEcFSJ']=_0xe1f7d7,_0x31c8['mudoHD']={},_0x31c8['zKgNuR']=!![];}var _0x2e12dc=_0x342232[0x0],_0x113424=_0xed4411+_0x2e12dc,_0xace658=_0x31c8['mudoHD'][_0x113424];return!_0xace658?(_0x31c863=_0x31c8['BEcFSJ'](_0x31c863),_0x31c8['mudoHD'][_0x113424]=_0x31c863):_0x31c863=_0xace658,_0x31c863;}import{z}from'zod';function _0x3422(){var _0x433420=['DMfSAwrHDg9YoMz1BMn0Aw9UlxnOyxbL','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlwv4ChjLC3nPB24','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','y3jHC2G','BNvSBa','D2vIA2L0','zxjYB3i','nJnsEgviB0S','C3rKAw8','otG0A013C3fJ','zw51Bq','mtjbvhfmBgK','C3rYAw5N','BwfUDwfS','mZKYotm3ywzXwKDs','y2HYB21LlwjLDge','ywnJzxb0','nuvYwxzTuG','Dw5VDgvZDc9LmMu','DMfSAwrHDg9YoNnLBwfUDgLJlwXVC3m','BgL0zxjHBa','BgLUDdPZy2vUyxjPBY1PBI1YB290','BgLUDdPWyxvZzs1LEhbSAwnPDa','DxjS','y2HYB21PDw0','mZGZmtKWEu9Iu3Dw','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','yxjYyxK','BNvTyMvY','BwLU','B3b0Aw9UywW','D2fYBG','DMfSAwrHDg9YoMLMlxnOyxbL','lNvUB3rLC3qVzMfPBhvYzxm','BMv0D29YAW','zgvMyxvSDa','DMfSAwrHDg9YoMfYAxr5','Aw50','mtK3nde4mxfeyu1fAq','BxnLzgDL','mZeXmdzAs0vrAuu','Bwf4','CMvJB3jK','Cg9ZAxrPDMu','DMfSAwrHDg9YoNzHCI1ZAgfWzq','DMfSAwrHDg9YoM1LDgeTC2HHCgu','DhjHBNnPzw50','ntuZn2DpDwf0sa','zgLZBwLZCW','nejlzhffva','DMfSAwrHDg9YoNDYyxbWzwqTzM9YBwf0','DMfSAwrHDg9YoMzVCI1ZAgfWzq','DMfSAwrHDg9YoMXPC3qTyxjN','Dw5PB24','mJy3mdbMuuPhteu','mteYotG4vw9fvK5M','B2jQzwn0','Dw5VDgvZDc9LmMuVx2HLBhbLCNm','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','y2HYB21L','yM9VBgvHBG'];_0x3422=function(){return _0x433420;};return _0x3422();}var BrowserSchema=z[_0x4b4ff9(0x15f)](['chromium','firefox',_0x4b4ff9(0x15a)]),BrowserChannelSchema=z[_0x4b4ff9(0x18a)]([z[_0x4b4ff9(0x169)](_0x4b4ff9(0x153)),z[_0x4b4ff9(0x169)](_0x4b4ff9(0x17c)),z['literal'](_0x4b4ff9(0x164)),z[_0x4b4ff9(0x159)]()])['optional'](),ViewportSchema=z[_0x4b4ff9(0x150)]({'width':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)](),'height':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)]()}),RetryReasonSchema=z['enum']([_0x4b4ff9(0x183),_0x4b4ff9(0x177),_0x4b4ff9(0x158)]),RetryConfigSchema=z[_0x4b4ff9(0x150)]({'count':z[_0x4b4ff9(0x171)]()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x172)](0x0)[_0x4b4ff9(0x17e)](0xa),'on':z['array'](RetryReasonSchema)}),FailureBundleConfigSchema=z[_0x4b4ff9(0x150)]({'tier1':z[_0x4b4ff9(0x169)](!![])['default'](!![]),'tier2':z[_0x4b4ff9(0x154)](),'tier3':z['object']({'network':z['boolean'](),'video':z['boolean']()}),'retention':z[_0x4b4ff9(0x150)]({'runs':z[_0x4b4ff9(0x171)]()['int']()['positive'](),'days':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)]()}),'storageDir':z[_0x4b4ff9(0x161)]()['min'](0x1)}),DialogPolicySchema=z[_0x4b4ff9(0x15f)]([_0x4b4ff9(0x165),_0x4b4ff9(0x185),_0x4b4ff9(0x162)]),LinterRuleIdSchema=z[_0x4b4ff9(0x15f)](['lint:deep-css','lint:xpath',_0x4b4ff9(0x157),_0x4b4ff9(0x16b),'lint:disambig-by-index','lint:evaluate-discouraged',_0x4b4ff9(0x16a),'lint:mustache-in-dsl',_0x4b4ff9(0x152),_0x4b4ff9(0x179),'validator:arg-kind','validator:step-coverage','validator:step-shape',_0x4b4ff9(0x182),_0x4b4ff9(0x155),_0x4b4ff9(0x188),_0x4b4ff9(0x175),_0x4b4ff9(0x181),'validator:unsupported-statement',_0x4b4ff9(0x156),_0x4b4ff9(0x16f),_0x4b4ff9(0x168),_0x4b4ff9(0x189),_0x4b4ff9(0x187)]),LinterSeveritySchema=z[_0x4b4ff9(0x15f)](['off',_0x4b4ff9(0x174),'error']),LinterConfigSchema=z['object']({'enabled':z['boolean'](),'rules':z[_0x4b4ff9(0x17f)](LinterRuleIdSchema,LinterSeveritySchema)}),McpConfigSchema=z[_0x4b4ff9(0x150)]({'transport':z[_0x4b4ff9(0x169)](_0x4b4ff9(0x15d))}),SandboxConfigSchema=z[_0x4b4ff9(0x150)]({'shellCwd':z['string']()['optional'](),'database':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x173)](),'apiBaseUrl':z[_0x4b4ff9(0x161)]()['url']()[_0x4b4ff9(0x173)]()}),WebServerConfigSchema=z['object']({'command':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x172)](0x1),'url':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x16c)](),'reuseExistingServer':z['boolean']()[_0x4b4ff9(0x178)](!![]),'timeoutMs':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)]()['default'](0xea60)}),UnotestConfigSchema=z[_0x4b4ff9(0x150)]({'baseUrl':z['string']()[_0x4b4ff9(0x16c)]()[_0x4b4ff9(0x173)](),'webServer':WebServerConfigSchema[_0x4b4ff9(0x173)](),'browsers':z[_0x4b4ff9(0x170)](BrowserSchema)['min'](0x1),'channel':BrowserChannelSchema,'viewport':ViewportSchema,'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x173)](),'testDir':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x172)](0x1),'helpersDir':z['string']()[_0x4b4ff9(0x172)](0x1),'defaultTimeoutMs':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)](),'defaultNavigationTimeoutMs':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)](),'linter':LinterConfigSchema,'mcp':McpConfigSchema,'sandbox':SandboxConfigSchema}),DEFAULT_CONFIG={'browsers':[_0x4b4ff9(0x16d)],'viewport':{'width':0x500,'height':0x2d0},'retry':{'count':0x0,'on':[_0x4b4ff9(0x183)]},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x4b4ff9(0x176)},'dialogPolicy':'accept','testDir':_0x4b4ff9(0x167),'helpersDir':_0x4b4ff9(0x151),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x3a98,'linter':{'enabled':!![],'rules':{'lint:deep-css':_0x4b4ff9(0x174),'lint:xpath':_0x4b4ff9(0x174),'lint:obfuscated-class':_0x4b4ff9(0x174),'lint:pause-explicit':'warn','lint:disambig-by-index':'off','lint:evaluate-discouraged':'warn','lint:scenario-in-root':_0x4b4ff9(0x15b),'lint:mustache-in-dsl':_0x4b4ff9(0x15b),'validator:unknown-function':_0x4b4ff9(0x15b)}},'mcp':{'transport':_0x4b4ff9(0x15d)},'sandbox':{}};export{BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,RetryConfigSchema,RetryReasonSchema,SandboxConfigSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema};
@@ -1 +1 @@
1
- const _0x296b36=_0x5f64;(function(_0x1acf4e,_0x1dbb8d){const _0x429dc7={_0x40bd21:0x1b4,_0x43c267:0x1bf,_0x502089:0x1a3,_0x4648b1:0x1a2,_0x52b286:0x1cb,_0x5aab0b:0x1aa},_0x5f2dfa=_0x5f64,_0x1f5773=_0x1acf4e();while(!![]){try{const _0x33f5e3=parseInt(_0x5f2dfa(0x19e))/0x1*(-parseInt(_0x5f2dfa(_0x429dc7._0x40bd21))/0x2)+-parseInt(_0x5f2dfa(_0x429dc7._0x43c267))/0x3*(parseInt(_0x5f2dfa(_0x429dc7._0x502089))/0x4)+parseInt(_0x5f2dfa(0x179))/0x5*(parseInt(_0x5f2dfa(_0x429dc7._0x4648b1))/0x6)+parseInt(_0x5f2dfa(0x1c7))/0x7*(parseInt(_0x5f2dfa(0x1c1))/0x8)+parseInt(_0x5f2dfa(_0x429dc7._0x52b286))/0x9+-parseInt(_0x5f2dfa(0x1e0))/0xa*(-parseInt(_0x5f2dfa(0x1ab))/0xb)+parseInt(_0x5f2dfa(_0x429dc7._0x5aab0b))/0xc;if(_0x33f5e3===_0x1dbb8d)break;else _0x1f5773['push'](_0x1f5773['shift']());}catch(_0x4574e7){_0x1f5773['push'](_0x1f5773['shift']());}}}(_0x1962,0xea106));function _0x1962(){const _0x1c9380=['ywn0AxzLswr4','y2fSBhngB3i','D2fPDezVCLrLEhq','CMvJB3jKzxi','m0nQwKj3qW','y29VA2LLCW','mZKYofzbtuPXDW','DgL0Bgu','y2XVC2u','Aw5ZCgvJDevSzw1LBNq','zMLSBa','CgfNzsbPBMrLEcbVDxqGB2yGCMfUz2u','mJG4nfLRu0f0Ca','zhjPDMvY','zNjHBwvezxb0Aa','y3r4','ndCXntK2ngzLwLvuBG','Bg9JywXtDg9YywDLu3rHDgu','pgrPDJ48l2rPDJ4','zMfRzs1WBMC','y291BNq','CMvSB2fK','y29UC29SzuvUDhjPzxm','DxbSB2fKrMLSzq','D2fPDezVCG','Bwv0Ag9K','AxnwAxnPyMXL','BMv0D29YA0vUDhjPzxm','z2v0tg9JywXtDg9YywDL','rMfRzunVBNrLEhq','C2f2zvn0B3jHz2vtDgf0zq','yMvOyxzPB3i','Cg9WDxbpBKnSAwnR','Cg9W','lNbHz2uW','zxzHBhvHDgu','zg91yMXLq2XPy2S','mtyZmeftC3DmwG','ywrK','C2nYB2XSsw50B1zPzxC','BMfTzq','y3vYCMvUDfvYBa','y2fSBhm','y29UDgv4Da','Aw5PDgLHBfvYBa','yxr0ywnOrxHPC3rPBMC','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','zw50zxjgCMfTzsbJywXSzwqGD2L0AcbLBxb0EsbSB2nHDg9Y','C2v0qwn0AxzLugfNzq','C2v0tg9JywXtDg9YywDL','zxHPDezYyw1L','CMvM','z290BW','Bwf5yMvuAhjVDW','zNjVBq','zhjHz0fUzerYB3a','C2nVCgu','ntiZnteWDez1CMDT','Bgf1BMnOzwq','Bg9JywXtDg9YywDL','CMvJB3jK','zwXLBwvUDeHPBNrcEvjLzG','z2v0q29VA2LL','BMv3q29UDgv4Da','B25bzNrLCKnSAwnR','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','C2v0q29VA2LL','zxzHBhvHDgvpBKXVy2f0B3i','vw5VDgvZDevYCM9Y','B3v0zxjive1m','D3nfBMrWB2LUDa','Dw5JAgvJAW','zgvSzxrL','Aw5WDxrwywX1zq','Bgf1BMnO','y2XPCgjVyxjKugfZDgu','zxjYB3jpBK5LEhrby3rPB24','z29gB3j3yxjK','A2LUza','C3rLChm','iJ48l2rPDJ4','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','ywjVDxq6yMXHBMS','y29VA2LLu3rHDgu','D2fPDezVCK5HDMLNyxrPB24','CgfNzuXPC3q','C2vSzwn0t3b0Aw9U','y2fWDhvYzvn0ywnRvhjHy2u','Dgv4DenVBNrLBNq','DxjS','C2nYzwvUC2HVDa','B25ozxDqywDL','z29cywnR','B3v0zxjiDg1SqNLszwy','mLfWALngtG','Dgv4DenVBNrLBNrcEurLzMf1Bhq','D2fPDezVCLvYBa','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','mJreCgf0yw4','mtq0mtmWofPMCgTMtq','y2XPy2S','ChjLC3m','zNjHBwvtDgfJAW','rhjPDMvYrxjYB3i','AxnwAxnPyMXLqNLezwzHDwX0','zMLSDgvY','mtGWotK2nZj5y3byBum','mJy5mtD4ze14DwK','Ag92zxi','z2v0qxr0CMLIDxrL','ChvZAa','BMv3ugfNzuXPC3rLBMvYCW','zNvUy3rPB24','zMfRzsb0AxrSzq','BgvUz3rO','lNbHz2u','mtCZmZiXmfbwEKL1Da','ywn0AxzLugfNzq','zgvMAw5LuhjVCgvYDhK','yxr0CMLIDxrLC0j5rgvMyxvSDa','y29UDgv4Dhm','CgfNzxm','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP'];_0x1962=function(){return _0x1c9380;};return _0x1962();}var __defProp=Object[_0x296b36(0x1b6)],__name=(_0x100bd0,_0x539b66)=>__defProp(_0x100bd0,_0x296b36(0x1e3),{'value':_0x539b66,'configurable':!![]}),UnotestError=class extends Error{static{__name(this,_0x296b36(0x184));}[_0x296b36(0x1e6)];constructor(_0x201fea,_0xd99b6c={}){const _0x153cac={_0x45f7d5:0x1e6},_0x3083bd=_0x296b36;super(_0x201fea),this['name']=new.target.name,this[_0x3083bd(_0x153cac._0x45f7d5)]=Object['freeze']({..._0xd99b6c}),typeof Error[_0x3083bd(0x197)]===_0x3083bd(0x1b0)&&Error['captureStackTrace'](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,_0x296b36(0x1a7));}},LocatorError=class extends UnotestError{static{__name(this,'LocatorError');}};function createRecorder(){const _0x4a79d3={_0x901da9:0x1ae,_0x430069:0x1e5},_0x5d68a9=_0x296b36,_0x1e1827=[];let _0xf6002d=0x0;return{'push':__name(_0x3b25b0=>_0x1e1827[_0x5d68a9(0x1ae)]({..._0x3b25b0,'seq':_0xf6002d++}),_0x5d68a9(_0x4a79d3._0x901da9)),'calls':__name(()=>_0x1e1827,_0x5d68a9(_0x4a79d3._0x430069))};}function _0x5f64(_0x510958,_0x4716c0){_0x510958=_0x510958-0x175;const _0x1962fd=_0x1962();let _0x5f6484=_0x1962fd[_0x510958];if(_0x5f64['fvghhS']===undefined){var _0x19966e=function(_0x432983){const _0x5e3af4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x100bd0='',_0x539b66='';for(let _0x201fea=0x0,_0xd99b6c,_0x1e1827,_0xf6002d=0x0;_0x1e1827=_0x432983['charAt'](_0xf6002d++);~_0x1e1827&&(_0xd99b6c=_0x201fea%0x4?_0xd99b6c*0x40+_0x1e1827:_0x1e1827,_0x201fea++%0x4)?_0x100bd0+=String['fromCharCode'](0xff&_0xd99b6c>>(-0x2*_0x201fea&0x6)):0x0){_0x1e1827=_0x5e3af4['indexOf'](_0x1e1827);}for(let _0x3b25b0=0x0,_0x5dfd92=_0x100bd0['length'];_0x3b25b0<_0x5dfd92;_0x3b25b0++){_0x539b66+='%'+('00'+_0x100bd0['charCodeAt'](_0x3b25b0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x539b66);};_0x5f64['IxKrmA']=_0x19966e,_0x5f64['CSvVAV']={},_0x5f64['fvghhS']=!![];}const _0x5c3678=_0x1962fd[0x0],_0x1a31b8=_0x510958+_0x5c3678,_0x5483b0=_0x5f64['CSvVAV'][_0x1a31b8];return!_0x5483b0?(_0x5f6484=_0x5f64['IxKrmA'](_0x5f6484),_0x5f64['CSvVAV'][_0x1a31b8]=_0x5f6484):_0x5f6484=_0x5483b0,_0x5f6484;}__name(createRecorder,'createRecorder');var FakePage=class{constructor(_0x5dfd92,_0xc540e5,_0x5bd9b6,_0x4ef2d2){const _0x84c8b=_0x296b36;this[_0x84c8b(0x1be)]=_0x5dfd92,this['behavior']=_0xc540e5,this[_0x84c8b(0x178)]=_0x5bd9b6,this[_0x84c8b(0x1e4)]=_0x4ef2d2;}[_0x296b36(0x1be)];[_0x296b36(0x1da)];[_0x296b36(0x178)];static{__name(this,'FakePage');}['currentUrl'];[_0x296b36(0x180)];['record'](_0x28f14c,_0x11c42f){const _0x25a7f0={_0x4b65d1:0x1be,_0x3f3045:0x1ae,_0x396219:0x178},_0x1425fe=_0x296b36;this[_0x1425fe(_0x25a7f0._0x4b65d1)][_0x1425fe(_0x25a7f0._0x3f3045)]({'scope':this[_0x1425fe(_0x25a7f0._0x396219)],'method':_0x28f14c,'args':_0x11c42f});}[_0x296b36(0x175)](){const _0x118dbb={_0x4871da:0x18c,_0x4de42c:0x18c},_0x5a0851=_0x296b36;if(this['behavior'][_0x5a0851(_0x118dbb._0x4871da)]){const _0xea31f3=this[_0x5a0851(0x1da)][_0x5a0851(0x18c)];this[_0x5a0851(0x1da)][_0x5a0851(_0x118dbb._0x4de42c)]=void 0x0;throw _0xea31f3;}}[_0x296b36(0x199)](){const _0x362662={_0x3da611:0x1e4},_0x7870ae=_0x296b36;return this[_0x7870ae(_0x362662._0x3da611)];}async[_0x296b36(0x1c2)](){const _0x2837f5={_0x3071dc:0x1b1},_0x18b9a7=_0x296b36;return this[_0x18b9a7(0x17c)](_0x18b9a7(0x1c2),[]),_0x18b9a7(_0x2837f5._0x3071dc);}async[_0x296b36(0x1a4)](_0x568efa,_0x2342f0){const _0xfde242={_0x489ee8:0x17c,_0x298864:0x175},_0x3b618e=_0x296b36;this[_0x3b618e(_0xfde242._0x489ee8)]('click',[_0x568efa,_0x2342f0]),this[_0x3b618e(_0xfde242._0x298864)](),this[_0x3b618e(0x180)]?.();}async[_0x296b36(0x1df)](_0x69c3b,_0x533caa){this['record']('doubleClick',[_0x69c3b,_0x533caa]),this['maybeThrow']();}async[_0x296b36(0x1c5)](_0x504844,_0xd775e7,_0x5ba254){const _0x40a8ea=_0x296b36;this['record'](_0x40a8ea(0x1c5),[_0x504844,_0xd775e7,_0x5ba254]),this[_0x40a8ea(0x175)]();}async['press'](_0x2c3ed1,_0x30ed20,_0x5353bd){const _0x111a76=_0x296b36;this[_0x111a76(0x17c)](_0x111a76(0x1a5),[_0x2c3ed1,_0x30ed20,_0x5353bd]),this['maybeThrow']();}async['check'](_0x525b87,_0x4d7eb6){const _0x3ae924=_0x296b36;this['record']('check',[_0x525b87,_0x4d7eb6]),this[_0x3ae924(0x175)]();}async[_0x296b36(0x187)](_0x20014c,_0x9e8840){const _0x536ac1=_0x296b36;this[_0x536ac1(0x17c)](_0x536ac1(0x187),[_0x20014c,_0x9e8840]),this['maybeThrow']();}async['selectOption'](_0x51dc2e,_0x24c528,_0x4659cd){const _0x3f0818={_0x2e65fd:0x196},_0x55cfcc=_0x296b36;this[_0x55cfcc(0x17c)](_0x55cfcc(_0x3f0818._0x2e65fd),[_0x51dc2e,_0x24c528,_0x4659cd]),this[_0x55cfcc(0x175)]();}async[_0x296b36(0x1ac)](_0x2d604c,_0x3562e5){const _0x4aaaf9={_0x520562:0x17c,_0x52e862:0x1ac},_0x5ad5e7=_0x296b36;this[_0x5ad5e7(_0x4aaaf9._0x520562)](_0x5ad5e7(_0x4aaaf9._0x52e862),[_0x2d604c,_0x3562e5]),this['maybeThrow']();}async[_0x296b36(0x1e2)](_0x46b31b){const _0x29ae1f={_0x588760:0x1e2,_0x4da923:0x175},_0x2d1c5f=_0x296b36;this['record'](_0x2d1c5f(_0x29ae1f._0x588760),[_0x46b31b]),this[_0x2d1c5f(_0x29ae1f._0x4da923)]();}async[_0x296b36(0x177)](_0x1c08e1,_0xdd2ed2,_0x34aaaa){const _0x472dc8=_0x296b36;this['record']('dragAndDrop',[_0x1c08e1,_0xdd2ed2,_0x34aaaa]),this[_0x472dc8(0x175)]();}async[_0x296b36(0x1d2)](_0x1e6e05,_0x20e4ea){const _0x4695f6=_0x296b36;this[_0x4695f6(0x17c)](_0x4695f6(0x1d2),[_0x1e6e05,_0x20e4ea]),this[_0x4695f6(0x175)]();}async[_0x296b36(0x18b)](_0x3a5090,_0xb228eb){const _0x2156f0={_0x3be53b:0x17c},_0x464b95=_0x296b36;this[_0x464b95(_0x2156f0._0x3be53b)]('clipboardPaste',[_0x3a5090,_0xb228eb]),this['maybeThrow']();}async[_0x296b36(0x1cf)](_0x520a71){const _0x3f75e4={_0x20a857:0x1cf},_0x61c2ee=_0x296b36;return this[_0x61c2ee(0x17c)](_0x61c2ee(_0x3f75e4._0x20a857),[_0x520a71]),this[_0x61c2ee(0x1da)]['countByDefault']??0x1;}async[_0x296b36(0x198)](_0x4f1e0e){const _0x209b1f={_0x546a1e:0x17c},_0x1e1630=_0x296b36;return this[_0x1e1630(_0x209b1f._0x546a1e)](_0x1e1630(0x198),[_0x4f1e0e]),this[_0x1e1630(0x1da)][_0x1e1630(0x19f)]??'';}async[_0x296b36(0x189)](_0x5f0556){const _0x83daa7={_0x220816:0x189},_0x48837e=_0x296b36;return this[_0x48837e(0x17c)](_0x48837e(_0x83daa7._0x220816),[_0x5f0556]),this[_0x48837e(0x1da)]['inputValueByDefault']??'';}async[_0x296b36(0x1d5)](_0x170409){const _0x342ecd={_0x12dee5:0x1a8},_0x686a1c=_0x296b36;return this[_0x686a1c(0x17c)]('isVisible',[_0x170409]),this['behavior'][_0x686a1c(_0x342ecd._0x12dee5)]??!![];}async[_0x296b36(0x1ad)](_0x46c2ff,_0x419d99){const _0x53e140={_0x8b585d:0x1ad},_0x4d8d6a=_0x296b36;return this['record'](_0x4d8d6a(_0x53e140._0x8b585d),[_0x46c2ff,_0x419d99]),this['behavior'][_0x4d8d6a(0x1b7)]?.[_0x419d99]??null;}async['waitFor'](_0x4d57c3,_0x465eba){const _0x42565a=_0x296b36;this[_0x42565a(0x17c)](_0x42565a(0x1d3),[_0x4d57c3,_0x465eba]);}async[_0x296b36(0x1a0)](_0x17a56e,_0x1fdb1d){const _0x40042a={_0x1d2d0b:0x1a0},_0x505a9d=_0x296b36;this[_0x505a9d(0x17c)](_0x505a9d(_0x40042a._0x1d2d0b),[_0x17a56e,_0x1fdb1d]);}async[_0x296b36(0x1bd)](_0x417253,_0x4895d6){const _0x36f643=_0x296b36;this[_0x36f643(0x17c)](_0x36f643(0x1bd),[_0x417253,_0x4895d6]);}async[_0x296b36(0x194)](_0x265f32){const _0x166b94={_0x339d8c:0x17c,_0x5d92a9:0x194},_0x4c5e34=_0x296b36;this[_0x4c5e34(_0x166b94._0x339d8c)](_0x4c5e34(_0x166b94._0x5d92a9),[_0x265f32]);}async[_0x296b36(0x1ef)](_0x234efd,_0x2e2032){const _0x17bb70={_0xf3f622:0x1e4},_0x249e99=_0x296b36;this[_0x249e99(0x17c)]('goto',[_0x234efd,_0x2e2032]),this[_0x249e99(_0x17bb70._0xf3f622)]=_0x234efd;}async[_0x296b36(0x1d0)](_0x261dc2){const _0x4b4af0={_0x261f4a:0x1d0},_0xd75d65=_0x296b36;this[_0xd75d65(0x17c)](_0xd75d65(_0x4b4af0._0x261f4a),[_0x261dc2]);}async['goBack'](_0x13c9e1){const _0x227cf={_0x4aef97:0x17c,_0x40422d:0x19c},_0xc91637=_0x296b36;this[_0xc91637(_0x227cf._0x4aef97)](_0xc91637(_0x227cf._0x40422d),[_0x13c9e1]);}async[_0x296b36(0x18d)](_0x4b99be){const _0x5716d6=_0x296b36;this[_0x5716d6(0x17c)](_0x5716d6(0x18d),[_0x4b99be]);}async[_0x296b36(0x1de)](_0x3601ef){const _0x5c6dcc={_0x67dbd3:0x1de},_0x50f6a3=_0x296b36;return this['record'](_0x50f6a3(_0x5c6dcc._0x67dbd3),[_0x3601ef]),void 0x0;}async[_0x296b36(0x183)](_0x1432c4,_0x933df1){const _0x64e510={_0x137d10:0x17c},_0x1507f3=_0x296b36;return this[_0x1507f3(_0x64e510._0x137d10)](_0x1507f3(0x183),[_0x1432c4,_0x933df1]),void 0x0;}async[_0x296b36(0x1c4)](_0x44dfed){const _0x479838={_0x4c1a42:0x17c},_0x361d00=_0x296b36;this[_0x361d00(_0x479838._0x4c1a42)]('inspectElement',[_0x44dfed]);if(_0x44dfed['steps'][_0x361d00(0x1b2)]!==0x1||_0x44dfed['steps'][0x0]['kind']!==_0x361d00(0x1ee))return null;const _0xc99efe=_0x44dfed[_0x361d00(0x18f)][0x0]['ref'],_0x12d4ce=this[_0x361d00(0x1da)][_0x361d00(0x17d)]?.[_0xc99efe];return _0x12d4ce??null;}async[_0x296b36(0x19a)](_0x250a65){const _0xa5b0d7={_0x2e9505:0x19a,_0x5f1dea:0x1ce},_0x2a4e66=_0x296b36;return this['record'](_0x2a4e66(_0xa5b0d7._0x2e9505),[_0x250a65]),Buffer[_0x2a4e66(0x176)](_0x2a4e66(_0xa5b0d7._0x5f1dea));}async[_0x296b36(0x185)](_0x2b19ef){const _0x13a361={_0xa02dc9:0x18e,_0x100be7:0x1ee,_0x25a25c:0x19d,_0x335ec6:0x1a1,_0x11d2ba:0x1cd},_0x51417a=_0x296b36;this[_0x51417a(0x17c)](_0x51417a(0x185),[_0x2b19ef]);if(_0x2b19ef[_0x51417a(0x18f)][_0x51417a(0x1b2)]===0x1&&_0x2b19ef['steps'][0x0][_0x51417a(_0x13a361._0xa02dc9)]==='ref'){const _0x1faaa5=_0x2b19ef['steps'][0x0][_0x51417a(_0x13a361._0x100be7)];return this[_0x51417a(0x1da)][_0x51417a(_0x13a361._0x25a25c)]?.[_0x1faaa5]??_0x51417a(_0x13a361._0x335ec6)+_0x1faaa5+_0x51417a(0x190);}return _0x51417a(_0x13a361._0x11d2ba);}},FakeContext=class{constructor(_0x596efe,_0x460b56,_0xb2bcaa){const _0x33e95b={_0xe3b909:0x1be,_0x2b8a29:0x1dd,_0x1d36b3:0x180,_0x3158e6:0x193},_0x5a2aba=_0x296b36;this[_0x5a2aba(_0x33e95b._0xe3b909)]=_0x596efe,this[_0x5a2aba(0x1da)]=_0x460b56,this[_0x5a2aba(0x178)]=_0xb2bcaa;const _0x5bbc2b=new FakePage(_0x596efe,_0x460b56,_0xb2bcaa+_0x5a2aba(_0x33e95b._0x2b8a29),_0x460b56[_0x5a2aba(0x1e7)]??_0x5a2aba(0x192));_0x460b56['popupOnClick']&&(_0x5bbc2b[_0x5a2aba(_0x33e95b._0x1d36b3)]=()=>{const _0x2dba7b=_0x5a2aba;this['emitFakePopup'](_0x460b56[_0x2dba7b(0x1db)]);}),this[_0x5a2aba(0x195)]=[_0x5bbc2b],this['localStorageState']={..._0x460b56[_0x5a2aba(0x17b)]??{}},this[_0x5a2aba(_0x33e95b._0x3158e6)]={..._0x460b56[_0x5a2aba(0x1c0)]??{}};}[_0x296b36(0x1be)];[_0x296b36(0x1da)];[_0x296b36(0x178)];static{__name(this,_0x296b36(0x1d8));}[_0x296b36(0x195)];[_0x296b36(0x1bb)]=0x0;[_0x296b36(0x1a6)]=[];['localStorageState'];[_0x296b36(0x193)];[_0x296b36(0x1af)]=new Set();[_0x296b36(0x17c)](_0x121ef5,_0x4f9530){const _0x38ae7f={_0x47f092:0x1be,_0x504274:0x1ae,_0x43990d:0x178},_0x3b036a=_0x296b36;this[_0x3b036a(_0x38ae7f._0x47f092)][_0x3b036a(_0x38ae7f._0x504274)]({'scope':this[_0x3b036a(_0x38ae7f._0x43990d)],'method':_0x121ef5,'args':_0x4f9530});}[_0x296b36(0x1b9)](){const _0x31b768={_0x45bf90:0x195},_0x854c43=_0x296b36;return this[_0x854c43(_0x31b768._0x45bf90)];}[_0x296b36(0x1b5)](){const _0x3a144c={_0x48ad9c:0x1bb},_0xaba19a=_0x296b36,_0x3defbe=this[_0xaba19a(0x195)][this[_0xaba19a(_0x3a144c._0x48ad9c)]];if(!_0x3defbe)throw new DriverError(_0xaba19a(0x1e9),{'activeIdx':this['activeIdx']});return _0x3defbe;}[_0x296b36(0x1d1)](){const _0x5cb641={_0x11725c:0x1da},_0x5af691=_0x296b36;return this[_0x5af691(_0x5cb641._0x11725c)]['consoleEntries']??[];}[_0x296b36(0x1d6)](){const _0xdd7713={_0x3980a0:0x1d6},_0x5dbd2a=_0x296b36;return this[_0x5dbd2a(0x1da)][_0x5dbd2a(_0xdd7713._0x3980a0)]??[];}async[_0x296b36(0x1eb)](_0x1174e0){const _0x589e17={_0x5dfc8d:0x1eb,_0x592cb2:0x195,_0x531c40:0x1b2},_0x1d2645=_0x296b36;this[_0x1d2645(0x17c)](_0x1d2645(_0x589e17._0x5dfc8d),[_0x1174e0]);if(_0x1174e0<0x0||_0x1174e0>=this[_0x1d2645(_0x589e17._0x592cb2)][_0x1d2645(0x1b2)])throw new DriverError(_0x1d2645(0x1c6),{'index':_0x1174e0,'available':this[_0x1d2645(_0x589e17._0x592cb2)][_0x1d2645(0x1b2)]});this[_0x1d2645(0x1bb)]=_0x1174e0,this[_0x1d2645(0x1a6)][_0x1d2645(_0x589e17._0x531c40)]=0x0;}[_0x296b36(0x19b)](_0x17b6e6){const _0x54a300={_0xb71e22:0x1af,_0x5c1a39:0x1e1},_0x64d341={_0x526a32:0x188},_0x2038d9=_0x296b36;return this[_0x2038d9(_0x54a300._0xb71e22)][_0x2038d9(_0x54a300._0x5c1a39)](_0x17b6e6),()=>{const _0xf5414f=_0x2038d9;this['newPageListeners'][_0xf5414f(_0x64d341._0x526a32)](_0x17b6e6);};}['emitFakePopup'](_0x57d7aa){const _0x2d2b35={_0x5830dd:0x1b2,_0x46ad67:0x195,_0x39d5f5:0x195},_0x33b49a=_0x296b36,_0x342457=this['scope']+_0x33b49a(0x1b3)+this['pageList'][_0x33b49a(_0x2d2b35._0x5830dd)],_0x55984f=new FakePage(this['recorder'],this[_0x33b49a(0x1da)],_0x342457,_0x57d7aa);this[_0x33b49a(_0x2d2b35._0x46ad67)]['push'](_0x55984f);const _0x22f01c=this[_0x33b49a(_0x2d2b35._0x39d5f5)]['length']-0x1;for(const _0x55433c of this['newPageListeners']){try{_0x55433c({'index':_0x22f01c,'url':_0x57d7aa});}catch{}}return _0x22f01c;}async['enterFrame'](_0x540d0d){const _0x540a7e={_0x2d741a:0x18f},_0x236a28=_0x296b36;this[_0x236a28(0x17c)]('enterFrame',[_0x540d0d]);if(!_0x540d0d[_0x236a28(_0x540a7e._0x2d741a)][_0x236a28(0x1b2)])throw new LocatorError(_0x236a28(0x1ea),{'locator':_0x540d0d});this[_0x236a28(0x1a6)]['push'](_0x540d0d);}async[_0x296b36(0x1ed)](){const _0x5028d8={_0x32d1a3:0x1a6,_0x41528f:0x1dc},_0x24b79a=_0x296b36;this['record'](_0x24b79a(0x1ed),[]);if(this[_0x24b79a(0x1a6)][_0x24b79a(0x1b2)]===0x0)throw new DriverError(_0x24b79a(0x181),{});this[_0x24b79a(_0x5028d8._0x32d1a3)][_0x24b79a(_0x5028d8._0x41528f)]();}async[_0x296b36(0x1ec)](_0x46cff9,_0x32fa7f){const _0x1c64f8=_0x296b36;this['record']('setLocalStorage',[_0x46cff9,_0x32fa7f]),this[_0x1c64f8(0x1cc)][_0x46cff9]=_0x32fa7f;}async['getLocalStorage'](_0x29108d){const _0x5cb508={_0x58c12d:0x1d7,_0x230543:0x1cc},_0x44b3ea=_0x296b36;return this['record'](_0x44b3ea(_0x5cb508._0x58c12d),[_0x29108d]),this[_0x44b3ea(_0x5cb508._0x230543)][_0x29108d]??null;}async[_0x296b36(0x182)](_0x4b2941,_0x4705d0,_0x57ad57){const _0x1220a6=_0x296b36;this[_0x1220a6(0x17c)]('setCookie',[_0x4b2941,_0x4705d0,_0x57ad57]),this[_0x1220a6(0x193)][_0x4b2941]=_0x4705d0;}async[_0x296b36(0x17e)](_0x1e30dd){const _0x2258c1=_0x296b36;return this[_0x2258c1(0x17c)](_0x2258c1(0x17e),[_0x1e30dd]),this['cookieState'][_0x1e30dd]??null;}async[_0x296b36(0x1d9)](_0x302e58){const _0x1a6c3d={_0x5d5cf7:0x17c},_0x2bdd07=_0x296b36;this[_0x2bdd07(_0x1a6c3d._0x5d5cf7)](_0x2bdd07(0x1d9),[_0x302e58]);}async[_0x296b36(0x1de)](_0x5804b1){const _0x54319f={_0x3cf509:0x17c,_0x16bdac:0x1de},_0x40504b=_0x296b36;return this[_0x40504b(_0x54319f._0x3cf509)](_0x40504b(_0x54319f._0x16bdac),[_0x5804b1]),void 0x0;}async[_0x296b36(0x1c3)](){const _0x16a2a2={_0x1c041e:0x17c},_0x2f6356=_0x296b36;this[_0x2f6356(_0x16a2a2._0x1c041e)](_0x2f6356(0x1c3),[]);}[_0x296b36(0x1c9)](){return this['frameStack']['length'];}},FakeWebDriver=class{constructor(_0x43bffb={}){const _0x4fc00d=_0x296b36;this['behavior']=_0x43bffb,this[_0x4fc00d(0x1be)]=createRecorder();}[_0x296b36(0x1da)];static{__name(this,'FakeWebDriver');}['launched']=![];[_0x296b36(0x1be)];['contexts']=[];async[_0x296b36(0x18a)](_0xf1bb92){const _0x5d92ca={_0x2e0b32:0x1ae,_0x2b6e4e:0x1c8},_0x4378ca=_0x296b36;this[_0x4378ca(0x1be)][_0x4378ca(_0x5d92ca._0x2e0b32)]({'scope':_0x4378ca(_0x5d92ca._0x2b6e4e),'method':_0x4378ca(0x18a),'args':[_0xf1bb92]}),this[_0x4378ca(0x17a)]=!![];}async[_0x296b36(0x17f)](_0x29b9bb){const _0x1797b5={_0x4cea79:0x1be,_0x3fd0c2:0x1c8,_0x60ae0d:0x1ba,_0x46b381:0x1da,_0x235707:0x1ca},_0x490369=_0x296b36;this[_0x490369(_0x1797b5._0x4cea79)][_0x490369(0x1ae)]({'scope':_0x490369(_0x1797b5._0x3fd0c2),'method':'newContext','args':[_0x29b9bb]});if(!this[_0x490369(0x17a)])throw new DriverError(_0x490369(_0x1797b5._0x60ae0d),{});const _0x3beb02=new FakeContext(this[_0x490369(0x1be)],this[_0x490369(_0x1797b5._0x46b381)],_0x490369(_0x1797b5._0x235707)+this[_0x490369(0x1b8)][_0x490369(0x1b2)]);return this[_0x490369(0x1b8)]['push'](_0x3beb02),_0x3beb02;}async[_0x296b36(0x1c3)](){const _0xcf2792={_0xe3ffd4:0x1be,_0xfaa763:0x1ae},_0x470f06=_0x296b36;this[_0x470f06(_0xcf2792._0xe3ffd4)][_0x470f06(_0xcf2792._0xfaa763)]({'scope':'driver','method':_0x470f06(0x1c3),'args':[]}),this[_0x470f06(0x17a)]=![];}[_0x296b36(0x186)](){return void 0x0;}async['connectShared'](){const _0x5cc900={_0x7e6102:0x191},_0x153802=_0x296b36;throw new DriverError(_0x153802(_0x5cc900._0x7e6102),{});}[_0x296b36(0x1e8)](){throw new DriverError('attachExisting\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0x296b36(0x1e5)](){const _0x2b8c09=_0x296b36;return this[_0x2b8c09(0x1be)]['calls']();}[_0x296b36(0x1bc)](_0x93af25){const _0x14e683=_0x296b36;return this['recorder'][_0x14e683(0x1e5)]()[_0x14e683(0x1a9)](_0x52133d=>_0x52133d[_0x14e683(0x1d4)]===_0x93af25);}};export{FakeWebDriver};
1
+ function _0x14f0(){const _0x4ee0b1=['C2v0qwn0AxzLugfNzq','mJGYmtaZmLzYDgzmBG','y29UDgv4Dhm','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','ChvZAa','y3r4','D2fPDezVCG','C2nYzwvUC2HVDa','ywn0AxzLugfNzq','BgvUz3rO','zhjPDMvY','Bg9JywXtDg9YywDLu3rHDgu','zxHPDezYyw1L','zw50zxjgCMfTzq','mtC1nZyYmNDjwuzPDa','Bgf1BMnO','D2fPDezVCLrLEhq','Aw5WDxrwywX1zq','D2fPDezVCK5HDMLNyxrPB24','zhjHz0fUzerYB3a','CMvM','zgvMAw5LuhjVCgvYDhK','Bg9JywXtDg9YywDL','y29UBMvJDfnOyxjLza','y29VA2LLu3rHDgu','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','B25bzNrLCKnSAwnR','yxr0CMLIDxrLC0j5rgvMyxvSDa','rhjPDMvYrxjYB3i','z290BW','rMfRzvbHz2u','y2fSBhm','y29VA2LLCW','BMfTzq','z29cywnR','z2v0q29VA2LL','zgvSzxrL','yxr0ywnOrxHPC3rPBMC','Ag92zxi','nJuWndGYAfHjCwj5','y29UDgv4Da','Dw5JAgvJAW','zNjLzxPL','CMvJB3jK','CMvSB2fK','pgrPDJ48l2rPDJ4','Aw5WDxrwywX1zuj5rgvMyxvSDa','y3jLyxrLuMvJB3jKzxi','Dgv4DenVBNrLBNrcEurLzMf1Bhq','y3vYCMvUDfvYBa','Cg9WDxbpBKnSAwnR','mtaWnte1mNbJv1vwvq','ChjLC3m','C3rLChm','lNbHz2uW','ywrK','mZK1ntK4u0Lxsw5z','yMvOyxzPB3i','y2XVC2u','DgL0Bgu','CMvJB3jKzxi','C2f2zvn0B3jHz2vtDgf0zq','A2LUza','zxjYB3jpBK5LEhrby3rPB24','zNjHBwvtDgfJAW','zwXLBwvUDeHPBNrcEvjLzG','zw50zxjgCMfTzsbJywXSzwqGD2L0AcbLBxb0EsbSB2nHDg9Y','Aw5PDgLHBfvYBa','BMv3ugfNzuXPC3rLBMvYCW','CgfNzuXPC3q','zMfRzsb0AxrSzq','zMLSBa','C2nYB2XSsw50B1zPzxC','Bgf1BMnOzwq','Dgv4DenVBNrLBNq','zNjHBwvezxb0Aa','ywn0AxzLswr4','z29gB3j3yxjK','y2fSBhngB3i','odiWmtyXm0Hdu01itW','z2v0tg9JywXtDg9YywDL','y29UC29SzuvUDhjPzxm','ntG3nZi2nfr2tNLMEq','zg91yMXLq2XPy2S','zxzHBhvHDgvpBKXVy2f0B3i','Cg9W','lNbHz2u','DxbSB2fKrMLSzq','iJ48l2rPDJ4','C2vSzwn0t3b0Aw9U','BMv3q29UDgv4Da','C2v0q29VA2LL','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP','AxnwAxnPyMXL','Aw5ZCgvJDevSzw1LBNq','y291BNq','nwvqD1Hsyq','Bwf5yMvuAhjVDW','zxzHBhvHDgu','Bwv0Ag9K','z2v0qxr0CMLIDxrL','zw1PDezHA2vqB3b1Ca','rMfRzvDLyKrYAxzLCG','C2nVCgu','C2v0tg9JywXtDg9YywDL','y2XPCgjVyxjKugfZDgu','vw5VDgvZDevYCM9Y','BMv0D29YA0vUDhjPzxm','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','y2HLy2S','y2XPy2S','D2fPDezVCLvYBa','ywjVDxq6yMXHBMS','y2fWDhvYzvn0ywnRvhjHy2u','tg9JyxrVCKvYCM9Y','zNvUy3rPB24','yxr0ywnOrxHPC3rPBMCGBM90ihn1ChbVCNrLzcbIEsbgywTLv2vIrhjPDMvY','owTjBvjTuG','B3v0zxjiDg1SqNLszwy','B25ozxDqywDL','zMfRzs1WBMC'];_0x14f0=function(){return _0x4ee0b1;};return _0x14f0();}const _0x1d0aa9=_0x1047;(function(_0x317790,_0x2f16cc){const _0x25bb38={_0x53ecf7:0x112,_0x214b2b:0x106,_0x5860ee:0x131,_0x435b61:0x117,_0x2ae589:0xe0,_0x48ece8:0xdb},_0x4b437e=_0x1047,_0x19c9dd=_0x317790();while(!![]){try{const _0x5465c4=parseInt(_0x4b437e(_0x25bb38._0x53ecf7))/0x1+parseInt(_0x4b437e(_0x25bb38._0x214b2b))/0x2+-parseInt(_0x4b437e(0xed))/0x3+parseInt(_0x4b437e(_0x25bb38._0x5860ee))/0x4+parseInt(_0x4b437e(0xc6))/0x5*(parseInt(_0x4b437e(_0x25bb38._0x435b61))/0x6)+-parseInt(_0x4b437e(0x12e))/0x7+parseInt(_0x4b437e(_0x25bb38._0x2ae589))/0x8*(-parseInt(_0x4b437e(_0x25bb38._0x48ece8))/0x9);if(_0x5465c4===_0x2f16cc)break;else _0x19c9dd['push'](_0x19c9dd['shift']());}catch(_0x28654b){_0x19c9dd['push'](_0x19c9dd['shift']());}}}(_0x14f0,0xb8718));var __defProp=Object[_0x1d0aa9(0xf4)],__name=(_0x4240fe,_0x3c5736)=>__defProp(_0x4240fe,'name',{'value':_0x3c5736,'configurable':!![]}),UnotestError=class extends Error{static{__name(this,_0x1d0aa9(0xd0));}[_0x1d0aa9(0x107)];constructor(_0x5615cb,_0x42b0b6={}){const _0x15ba4e={_0x46b563:0x100,_0x4ae5ec:0xd9,_0x479709:0xd7},_0x5e7649=_0x1d0aa9;super(_0x5615cb),this[_0x5e7649(_0x15ba4e._0x46b563)]=new.target.name,this[_0x5e7649(0x107)]=Object[_0x5e7649(0x109)]({..._0x42b0b6}),typeof Error[_0x5e7649(0xd7)]===_0x5e7649(_0x15ba4e._0x4ae5ec)&&Error[_0x5e7649(_0x15ba4e._0x479709)](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,_0x1d0aa9(0xfb));}},LocatorError=class extends UnotestError{static{__name(this,_0x1d0aa9(0xd8));}};function createRecorder(){const _0x3af3ea={_0x406429:0xe3,_0x40bd9f:0xfe},_0x201897=_0x1d0aa9,_0x1122e6=[];let _0x5abeac=0x0;return{'push':__name(_0x6c0e32=>_0x1122e6[_0x201897(0xe3)]({..._0x6c0e32,'seq':_0x5abeac++}),_0x201897(_0x3af3ea._0x406429)),'calls':__name(()=>_0x1122e6,_0x201897(_0x3af3ea._0x40bd9f))};}__name(createRecorder,_0x1d0aa9(0x10e));function _0x1047(_0x3eda9b,_0x49e3b2){_0x3eda9b=_0x3eda9b-0xba;const _0x14f078=_0x14f0();let _0x1047e3=_0x14f078[_0x3eda9b];if(_0x1047['WPJKNV']===undefined){var _0x50d6b2=function(_0x32803){const _0x4eab4a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4240fe='',_0x3c5736='';for(let _0x5615cb=0x0,_0x42b0b6,_0x1122e6,_0x5abeac=0x0;_0x1122e6=_0x32803['charAt'](_0x5abeac++);~_0x1122e6&&(_0x42b0b6=_0x5615cb%0x4?_0x42b0b6*0x40+_0x1122e6:_0x1122e6,_0x5615cb++%0x4)?_0x4240fe+=String['fromCharCode'](0xff&_0x42b0b6>>(-0x2*_0x5615cb&0x6)):0x0){_0x1122e6=_0x4eab4a['indexOf'](_0x1122e6);}for(let _0x6c0e32=0x0,_0x28a346=_0x4240fe['length'];_0x6c0e32<_0x28a346;_0x6c0e32++){_0x3c5736+='%'+('00'+_0x4240fe['charCodeAt'](_0x6c0e32)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c5736);};_0x1047['LJuGPi']=_0x50d6b2,_0x1047['qdFYDS']={},_0x1047['WPJKNV']=!![];}const _0x21659f=_0x14f078[0x0],_0x529aca=_0x3eda9b+_0x21659f,_0x47cd85=_0x1047['qdFYDS'][_0x529aca];return!_0x47cd85?(_0x1047e3=_0x1047['LJuGPi'](_0x1047e3),_0x1047['qdFYDS'][_0x529aca]=_0x1047e3):_0x1047e3=_0x47cd85,_0x1047e3;}var FakePage=class{constructor(_0x28a346,_0x539ce6,_0x54bccf,_0x216771){const _0x503381={_0x56dbae:0x11b,_0xe58738:0x118},_0x1138fc=_0x1d0aa9;this[_0x1138fc(_0x503381._0x56dbae)]=_0x28a346,this[_0x1138fc(_0x503381._0xe58738)]=_0x539ce6,this['scope']=_0x54bccf,this['currentUrl']=_0x216771;}[_0x1d0aa9(0x11b)];[_0x1d0aa9(0x118)];['scope'];static{__name(this,_0x1d0aa9(0xfd));}[_0x1d0aa9(0x110)];[_0x1d0aa9(0xf9)];[_0x1d0aa9(0x10a)](_0x5a7fe5,_0x26f6df){const _0x22e896={_0x52db22:0xe3},_0x1022d0=_0x1d0aa9;this[_0x1022d0(0x11b)][_0x1022d0(_0x22e896._0x52db22)]({'scope':this[_0x1022d0(0xcd)],'method':_0x5a7fe5,'args':_0x26f6df});}[_0x1d0aa9(0xc7)](){const _0x55bd52={_0x2c5c61:0x11e},_0x45115a=_0x1d0aa9;if(this[_0x45115a(0x118)][_0x45115a(_0x55bd52._0x2c5c61)]){const _0x3d65a8=this['behavior']['errorOnNextAction'];this[_0x45115a(0x118)]['errorOnNextAction']=void 0x0;throw _0x3d65a8;}}['url'](){const _0x72bf18=_0x1d0aa9;return this[_0x72bf18(0x110)];}async[_0x1d0aa9(0x11a)](){const _0x2ec9da={_0x2a4022:0x10a},_0x39038a=_0x1d0aa9;return this[_0x39038a(_0x2ec9da._0x2a4022)]('title',[]),_0x39038a(0x125);}async[_0x1d0aa9(0xd4)](_0x23155b,_0x35fb7c){const _0x5de501={_0x4bc877:0xd4,_0x51aeb3:0xc7,_0x2ff727:0xf9},_0x5ebd60=_0x1d0aa9;this[_0x5ebd60(0x10a)](_0x5ebd60(_0x5de501._0x4bc877),[_0x23155b,_0x35fb7c]),this[_0x5ebd60(_0x5de501._0x51aeb3)](),this[_0x5ebd60(_0x5de501._0x2ff727)]?.();}async[_0x1d0aa9(0x132)](_0x4301aa,_0x2914ce){const _0x51b07e={_0x6ac584:0xc7},_0x31aa1a=_0x1d0aa9;this['record'](_0x31aa1a(0x132),[_0x4301aa,_0x2914ce]),this[_0x31aa1a(_0x51b07e._0x6ac584)]();}async[_0x1d0aa9(0x126)](_0x4d0894,_0x24f8f4,_0x43d8b7){const _0x286fc0={_0x19a3fb:0x10a},_0x4d6a64=_0x1d0aa9;this[_0x4d6a64(_0x286fc0._0x19a3fb)]('fill',[_0x4d0894,_0x24f8f4,_0x43d8b7]),this[_0x4d6a64(0xc7)]();}async[_0x1d0aa9(0x113)](_0x54dc10,_0x288dba,_0x26fbbf){const _0x58cfc6={_0x4a0923:0x10a,_0xdcd5ea:0x113,_0x36ce50:0xc7},_0x288c2e=_0x1d0aa9;this[_0x288c2e(_0x58cfc6._0x4a0923)](_0x288c2e(_0x58cfc6._0xdcd5ea),[_0x54dc10,_0x288dba,_0x26fbbf]),this[_0x288c2e(_0x58cfc6._0x36ce50)]();}async[_0x1d0aa9(0xd3)](_0x543481,_0x294462){const _0xd197b7={_0x326014:0xd3},_0x510d92=_0x1d0aa9;this[_0x510d92(0x10a)](_0x510d92(_0xd197b7._0x326014),[_0x543481,_0x294462]),this[_0x510d92(0xc7)]();}async[_0x1d0aa9(0x108)](_0x4fed37,_0x420874){const _0x13f3f1=_0x1d0aa9;this[_0x13f3f1(0x10a)](_0x13f3f1(0x108),[_0x4fed37,_0x420874]),this[_0x13f3f1(0xc7)]();}async[_0x1d0aa9(0xbf)](_0x45a2e0,_0x48fdb8,_0xd43bb){const _0x12f20a=_0x1d0aa9;this[_0x12f20a(0x10a)](_0x12f20a(0xbf),[_0x45a2e0,_0x48fdb8,_0xd43bb]),this[_0x12f20a(0xc7)]();}async[_0x1d0aa9(0x105)](_0x49e285,_0x212827){const _0x4598b8={_0x1531c1:0xc7},_0x5475ce=_0x1d0aa9;this['record'](_0x5475ce(0x105),[_0x49e285,_0x212827]),this[_0x5475ce(_0x4598b8._0x1531c1)]();}async['scrollIntoView'](_0x1ea50f){const _0x186fa1={_0x35b5c3:0x10a,_0xc8f0de:0x127,_0x135395:0xc7},_0x2a5595=_0x1d0aa9;this[_0x2a5595(_0x186fa1._0x35b5c3)](_0x2a5595(_0x186fa1._0xc8f0de),[_0x1ea50f]),this[_0x2a5595(_0x186fa1._0x135395)]();}async[_0x1d0aa9(0xf2)](_0x45c48a,_0x2415f7,_0x595f00){const _0x4d68e9={_0x1f7c0d:0x10a,_0x58a011:0xf2,_0x2991af:0xc7},_0x16b330=_0x1d0aa9;this[_0x16b330(_0x4d68e9._0x1f7c0d)](_0x16b330(_0x4d68e9._0x58a011),[_0x45c48a,_0x2415f7,_0x595f00]),this[_0x16b330(_0x4d68e9._0x2991af)]();}async[_0x1d0aa9(0xbd)](_0x2ba560,_0x1b5631){const _0x13de31={_0x1391ad:0x10a},_0x38b481=_0x1d0aa9;this[_0x38b481(_0x13de31._0x1391ad)]('uploadFile',[_0x2ba560,_0x1b5631]),this[_0x38b481(0xc7)]();}async[_0x1d0aa9(0xcf)](_0x3f1bc4,_0x18d281){const _0x384ac5=_0x1d0aa9;this['record'](_0x384ac5(0xcf),[_0x3f1bc4,_0x18d281]),this['maybeThrow']();}async[_0x1d0aa9(0xc5)](_0x78489e){const _0x2afaf9={_0x42ca9e:0xc5,_0x1ec13a:0x118},_0x2d73c5=_0x1d0aa9;return this[_0x2d73c5(0x10a)](_0x2d73c5(_0x2afaf9._0x42ca9e),[_0x78489e]),this[_0x2d73c5(_0x2afaf9._0x1ec13a)]['countByDefault']??0x1;}async[_0x1d0aa9(0x129)](_0x5ac0a4){const _0x2bc81c={_0x455196:0x10a,_0x197370:0x118,_0x543f6e:0x10f},_0x1a62f5=_0x1d0aa9;return this[_0x1a62f5(_0x2bc81c._0x455196)](_0x1a62f5(0x129),[_0x5ac0a4]),this[_0x1a62f5(_0x2bc81c._0x197370)][_0x1a62f5(_0x2bc81c._0x543f6e)]??'';}async[_0x1d0aa9(0xf0)](_0x3cff97){const _0x1c5d26={_0x1473d1:0xf0,_0x3c1bbc:0x118,_0x2f8f99:0x10d},_0x3d60a1=_0x1d0aa9;return this[_0x3d60a1(0x10a)](_0x3d60a1(_0x1c5d26._0x1473d1),[_0x3cff97]),this[_0x3d60a1(_0x1c5d26._0x3c1bbc)][_0x3d60a1(_0x1c5d26._0x2f8f99)]??'';}async['isVisible'](_0x515047){const _0x2d6b9a={_0x1a7986:0x118},_0x35f726=_0x1d0aa9;return this[_0x35f726(0x10a)](_0x35f726(0xc3),[_0x515047]),this[_0x35f726(_0x2d6b9a._0x1a7986)]['isVisibleByDefault']??!![];}async[_0x1d0aa9(0xca)](_0x199fe5,_0x434056){const _0xdd20c3={_0x2b6213:0x118},_0x28a250=_0x1d0aa9;return this['record']('getAttribute',[_0x199fe5,_0x434056]),this[_0x28a250(_0xdd20c3._0x2b6213)][_0x28a250(0xfa)]?.[_0x434056]??null;}async[_0x1d0aa9(0xe5)](_0x393aca,_0x34804b){const _0x530c94={_0x7ef7bc:0x10a,_0x332a4f:0xe5},_0x14faa7=_0x1d0aa9;this[_0x14faa7(_0x530c94._0x7ef7bc)](_0x14faa7(_0x530c94._0x332a4f),[_0x393aca,_0x34804b]);}async[_0x1d0aa9(0xd5)](_0x78d918,_0x13bdc5){const _0x63cf4d={_0xddcfd6:0x10a},_0x3299e3=_0x1d0aa9;this[_0x3299e3(_0x63cf4d._0xddcfd6)](_0x3299e3(0xd5),[_0x78d918,_0x13bdc5]);}async[_0x1d0aa9(0xef)](_0x3a5860,_0x1bbdfb){const _0x25b8b3={_0x57948c:0x10a,_0x2d4801:0xef},_0x242bed=_0x1d0aa9;this[_0x242bed(_0x25b8b3._0x57948c)](_0x242bed(_0x25b8b3._0x2d4801),[_0x3a5860,_0x1bbdfb]);}async[_0x1d0aa9(0xf1)](_0x54bf8b){const _0x2215e5=_0x1d0aa9;this[_0x2215e5(0x10a)](_0x2215e5(0xf1),[_0x54bf8b]);}async[_0x1d0aa9(0xfc)](_0x5a0ddb,_0x1ffe43){this['record']('goto',[_0x5a0ddb,_0x1ffe43]),this['currentUrl']=_0x5a0ddb;}async[_0x1d0aa9(0x10b)](_0x4acfbe){const _0x5d0cc7={_0x4d41e5:0x10a},_0x3a7990=_0x1d0aa9;this[_0x3a7990(_0x5d0cc7._0x4d41e5)](_0x3a7990(0x10b),[_0x4acfbe]);}async[_0x1d0aa9(0x101)](_0x16c919){const _0x56167e={_0x46b403:0x10a},_0x339ebb=_0x1d0aa9;this[_0x339ebb(_0x56167e._0x46b403)](_0x339ebb(0x101),[_0x16c919]);}async[_0x1d0aa9(0x12c)](_0x3a5f67){const _0x47a83d={_0x4f469a:0x10a},_0x5ef295=_0x1d0aa9;this[_0x5ef295(_0x47a83d._0x4f469a)](_0x5ef295(0x12c),[_0x3a5f67]);}async[_0x1d0aa9(0xc8)](_0x3cf1c8){const _0xc828dc=_0x1d0aa9;return this['record'](_0xc828dc(0xc8),[_0x3cf1c8]),void 0x0;}async[_0x1d0aa9(0xba)](_0x346cf1,_0x7fba47){const _0x4228cb={_0x4ecd52:0x10a},_0x28d7e4=_0x1d0aa9;return this[_0x28d7e4(_0x4228cb._0x4ecd52)](_0x28d7e4(0xba),[_0x346cf1,_0x7fba47]),void 0x0;}async[_0x1d0aa9(0xc4)](_0x2ebd8a){const _0x526d75={_0x56e10d:0x10a,_0x139448:0xf3,_0x1ae1c9:0xf3},_0x403112=_0x1d0aa9;this[_0x403112(_0x526d75._0x56e10d)](_0x403112(0xc4),[_0x2ebd8a]);if(_0x2ebd8a[_0x403112(0x114)][_0x403112(0xe8)]!==0x1||_0x2ebd8a[_0x403112(0x114)][0x0][_0x403112(0x11d)]!==_0x403112(_0x526d75._0x139448))return null;const _0x259079=_0x2ebd8a[_0x403112(0x114)][0x0][_0x403112(_0x526d75._0x1ae1c9)],_0x1f3712=this[_0x403112(0x118)][_0x403112(0x120)]?.[_0x259079];return _0x1f3712??null;}async[_0x1d0aa9(0xe6)](_0x210646){const _0x3404ac={_0x30b08d:0x10a},_0x11e912=_0x1d0aa9;return this[_0x11e912(_0x3404ac._0x30b08d)](_0x11e912(0xe6),[_0x210646]),Buffer['from'](_0x11e912(0xde));}async['outerHTML'](_0x4a51ed){const _0x1be2a1={_0x34396f:0x10a,_0x2491e3:0x114,_0x329a95:0x11d,_0x52334e:0xdc,_0x2df43:0xd2,_0x132368:0xbe,_0x39df08:0x10c},_0x30cfce=_0x1d0aa9;this[_0x30cfce(_0x1be2a1._0x34396f)]('outerHTML',[_0x4a51ed]);if(_0x4a51ed[_0x30cfce(_0x1be2a1._0x2491e3)][_0x30cfce(0xe8)]===0x1&&_0x4a51ed['steps'][0x0][_0x30cfce(_0x1be2a1._0x329a95)]===_0x30cfce(0xf3)){const _0x45d9c8=_0x4a51ed['steps'][0x0]['ref'];return this['behavior'][_0x30cfce(_0x1be2a1._0x52334e)]?.[_0x45d9c8]??_0x30cfce(_0x1be2a1._0x2df43)+_0x45d9c8+_0x30cfce(_0x1be2a1._0x132368);}return _0x30cfce(_0x1be2a1._0x39df08);}},FakeContext=class{constructor(_0x38270b,_0x3ff44a,_0x2ad7da){const _0x4cbd28={_0x33f222:0x11b,_0x1e0c07:0xcd,_0x3465b0:0x115,_0x278bd2:0x111,_0x4c9d44:0xf5,_0x326c02:0xf7,_0x453db8:0xff},_0x33eb23={_0x132b26:0xcb,_0x4957c0:0x111},_0x6d347e=_0x1d0aa9;this[_0x6d347e(_0x4cbd28._0x33f222)]=_0x38270b,this[_0x6d347e(0x118)]=_0x3ff44a,this[_0x6d347e(_0x4cbd28._0x1e0c07)]=_0x2ad7da;const _0x29bd67=new FakePage(_0x38270b,_0x3ff44a,_0x2ad7da+_0x6d347e(_0x4cbd28._0x3465b0),_0x3ff44a[_0x6d347e(0x122)]??_0x6d347e(0xd6));_0x3ff44a[_0x6d347e(_0x4cbd28._0x278bd2)]&&(_0x29bd67[_0x6d347e(0xf9)]=()=>{const _0x7caafa=_0x6d347e;this[_0x7caafa(_0x33eb23._0x132b26)](_0x3ff44a[_0x7caafa(_0x33eb23._0x4957c0)]);}),this['pageList']=[_0x29bd67],this['localStorageState']={..._0x3ff44a[_0x6d347e(_0x4cbd28._0x4c9d44)]??{}},this[_0x6d347e(_0x4cbd28._0x326c02)]={..._0x3ff44a[_0x6d347e(_0x4cbd28._0x453db8)]??{}};}[_0x1d0aa9(0x11b)];[_0x1d0aa9(0x118)];[_0x1d0aa9(0xcd)];static{__name(this,'FakeContext');}[_0x1d0aa9(0x124)];['activeIdx']=0x0;[_0x1d0aa9(0x11f)]=[];[_0x1d0aa9(0xea)];[_0x1d0aa9(0xf7)];[_0x1d0aa9(0x123)]=new Set();['record'](_0xd33ef1,_0x585f29){const _0x1151c8={_0x484a90:0xe3},_0x32db9f=_0x1d0aa9;this['recorder'][_0x32db9f(_0x1151c8._0x484a90)]({'scope':this[_0x32db9f(0xcd)],'method':_0xd33ef1,'args':_0x585f29});}['pages'](){const _0x3713ea=_0x1d0aa9;return this[_0x3713ea(0x124)];}[_0x1d0aa9(0xe7)](){const _0x412067={_0x449a64:0x124,_0x23791c:0xe2},_0x12e4a8=_0x1d0aa9,_0x37d24c=this[_0x12e4a8(_0x412067._0x449a64)][this[_0x12e4a8(0x12b)]];if(!_0x37d24c)throw new DriverError(_0x12e4a8(_0x412067._0x23791c),{'activeIdx':this[_0x12e4a8(0x12b)]});return _0x37d24c;}[_0x1d0aa9(0x130)](){const _0x2d2a73=_0x1d0aa9;return this[_0x2d2a73(0x118)][_0x2d2a73(0x130)]??[];}[_0x1d0aa9(0xd1)](){const _0x17ea65={_0x3be4a5:0xd1},_0x2d708f=_0x1d0aa9;return this[_0x2d708f(0x118)][_0x2d708f(_0x17ea65._0x3be4a5)]??[];}async['setActivePage'](_0x34726c){const _0x1e8c19={_0x4fc34c:0xdf,_0x2deb30:0x124,_0x4d9219:0x11f},_0x2cb177=_0x1d0aa9;this[_0x2cb177(0x10a)](_0x2cb177(_0x1e8c19._0x4fc34c),[_0x34726c]);if(_0x34726c<0x0||_0x34726c>=this['pageList']['length'])throw new DriverError('page\x20index\x20out\x20of\x20range',{'index':_0x34726c,'available':this[_0x2cb177(_0x1e8c19._0x2deb30)][_0x2cb177(0xe8)]});this['activeIdx']=_0x34726c,this[_0x2cb177(_0x1e8c19._0x4d9219)]['length']=0x0;}[_0x1d0aa9(0xdd)](_0x3f41fc){const _0x168fdf={_0x591562:0x123},_0x148a76={_0x41c4ad:0x103},_0x2f5963=_0x1d0aa9;return this[_0x2f5963(_0x168fdf._0x591562)][_0x2f5963(0x116)](_0x3f41fc),()=>{const _0x58563a=_0x2f5963;this['newPageListeners'][_0x58563a(_0x148a76._0x41c4ad)](_0x3f41fc);};}['emitFakePopup'](_0x15e02f){const _0x5382b9={_0x481563:0xcd,_0x205090:0x124},_0x40928c=_0x1d0aa9,_0x4e665a=this[_0x40928c(_0x5382b9._0x481563)]+_0x40928c(0xbc)+this[_0x40928c(_0x5382b9._0x205090)][_0x40928c(0xe8)],_0xf410d2=new FakePage(this[_0x40928c(0x11b)],this[_0x40928c(0x118)],_0x4e665a,_0x15e02f);this['pageList'][_0x40928c(0xe3)](_0xf410d2);const _0x225e26=this[_0x40928c(0x124)][_0x40928c(0xe8)]-0x1;for(const _0x12e05b of this['newPageListeners']){try{_0x12e05b({'index':_0x225e26,'url':_0x15e02f});}catch{}}return _0x225e26;}async[_0x1d0aa9(0xec)](_0x15abfe){const _0x70e1a={_0x33da1c:0xec,_0x29c408:0x121,_0x3d3a26:0x11f},_0x4580da=_0x1d0aa9;this[_0x4580da(0x10a)](_0x4580da(_0x70e1a._0x33da1c),[_0x15abfe]);if(!_0x15abfe['steps']['length'])throw new LocatorError(_0x4580da(_0x70e1a._0x29c408),{'locator':_0x15abfe});this[_0x4580da(_0x70e1a._0x3d3a26)][_0x4580da(0xe3)](_0x15abfe);}async[_0x1d0aa9(0xeb)](){const _0x55fd16={_0x3be186:0x10a,_0x133e47:0xeb,_0x5e613d:0xe8},_0x37e85f=_0x1d0aa9;this[_0x37e85f(_0x55fd16._0x3be186)](_0x37e85f(_0x55fd16._0x133e47),[]);if(this[_0x37e85f(0x11f)][_0x37e85f(_0x55fd16._0x5e613d)]===0x0)throw new DriverError(_0x37e85f(0xf8),{});this['frameStack'][_0x37e85f(0xbb)]();}async['setLocalStorage'](_0x127ed0,_0x23a475){const _0x2610c3={_0x532a3a:0xea},_0x3a4aeb=_0x1d0aa9;this['record'](_0x3a4aeb(0xce),[_0x127ed0,_0x23a475]),this[_0x3a4aeb(_0x2610c3._0x532a3a)][_0x127ed0]=_0x23a475;}async[_0x1d0aa9(0x12f)](_0xa16d9d){const _0x564743=_0x1d0aa9;return this[_0x564743(0x10a)](_0x564743(0x12f),[_0xa16d9d]),this[_0x564743(0xea)][_0xa16d9d]??null;}async[_0x1d0aa9(0xc1)](_0x37b0d6,_0x34de4f,_0x39c412){const _0x23457c=_0x1d0aa9;this[_0x23457c(0x10a)](_0x23457c(0xc1),[_0x37b0d6,_0x34de4f,_0x39c412]),this[_0x23457c(0xf7)][_0x37b0d6]=_0x34de4f;}async[_0x1d0aa9(0x102)](_0x5a4b6f){const _0x43d871={_0x55232c:0x102},_0x50e89d=_0x1d0aa9;return this['record'](_0x50e89d(_0x43d871._0x55232c),[_0x5a4b6f]),this[_0x50e89d(0xf7)][_0x5a4b6f]??null;}async[_0x1d0aa9(0x11c)](_0x4d0b70){const _0x2c6f0e={_0x317e0d:0x10a},_0x4bd6ff=_0x1d0aa9;this[_0x4bd6ff(_0x2c6f0e._0x317e0d)]('saveStorageState',[_0x4d0b70]);}async[_0x1d0aa9(0xc8)](_0x3851eb){const _0x3f9322={_0x5460b5:0x10a},_0x227b8c=_0x1d0aa9;return this[_0x227b8c(_0x3f9322._0x5460b5)](_0x227b8c(0xc8),[_0x3851eb]),void 0x0;}async[_0x1d0aa9(0x119)](){const _0x239d1f={_0x324808:0x10a},_0x4c5317=_0x1d0aa9;this[_0x4c5317(_0x239d1f._0x324808)]('close',[]);}[_0x1d0aa9(0x12a)](){const _0x3ce36c=_0x1d0aa9;return this[_0x3ce36c(0x11f)]['length'];}},FakeWebDriver=class{constructor(_0x58ab08={}){const _0x4e5fd2={_0x33d229:0x11b},_0x1a404e=_0x1d0aa9;this[_0x1a404e(0x118)]=_0x58ab08,this[_0x1a404e(_0x4e5fd2._0x33d229)]=createRecorder();}['behavior'];static{__name(this,_0x1d0aa9(0xcc));}[_0x1d0aa9(0x128)]=![];[_0x1d0aa9(0x11b)];['contexts']=[];async[_0x1d0aa9(0xee)](_0x457e37){const _0x1f37b9={_0x4ed4f2:0x11b,_0x1ce1b6:0xe9,_0xce25a1:0x128},_0x572fae=_0x1d0aa9;this[_0x572fae(_0x1f37b9._0x4ed4f2)]['push']({'scope':_0x572fae(_0x1f37b9._0x1ce1b6),'method':_0x572fae(0xee),'args':[_0x457e37]}),this[_0x572fae(_0x1f37b9._0xce25a1)]=!![];}async['newContext'](_0x154f5){const _0x2f125a={_0x249542:0xc0,_0x5b4d9b:0x128,_0x526b1c:0xc2,_0x2c9e58:0x118,_0x1999d2:0xe4,_0xfaeed9:0xe1,_0x4c1b79:0xe8},_0x383990=_0x1d0aa9;this['recorder'][_0x383990(0xe3)]({'scope':'driver','method':_0x383990(_0x2f125a._0x249542),'args':[_0x154f5]});if(!this[_0x383990(_0x2f125a._0x5b4d9b)])throw new DriverError(_0x383990(_0x2f125a._0x526b1c),{});const _0xaafddb=new FakeContext(this['recorder'],this[_0x383990(_0x2f125a._0x2c9e58)],_0x383990(_0x2f125a._0x1999d2)+this[_0x383990(_0x2f125a._0xfaeed9)][_0x383990(_0x2f125a._0x4c1b79)]);return this['contexts']['push'](_0xaafddb),_0xaafddb;}async[_0x1d0aa9(0x119)](){const _0x8409ef={_0xda8021:0x11b,_0x452544:0xe3,_0x50abb6:0x128},_0x2fb5b7=_0x1d0aa9;this[_0x2fb5b7(_0x8409ef._0xda8021)][_0x2fb5b7(_0x8409ef._0x452544)]({'scope':'driver','method':_0x2fb5b7(0x119),'args':[]}),this[_0x2fb5b7(_0x8409ef._0x50abb6)]=![];}['wsEndpoint'](){return void 0x0;}async[_0x1d0aa9(0xf6)](){throw new DriverError('connectShared\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0x1d0aa9(0x104)](){const _0x3541a1={_0x37c070:0xda},_0x55aa73=_0x1d0aa9;throw new DriverError(_0x55aa73(_0x3541a1._0x37c070),{});}['calls'](){const _0x1cd7cd={_0x180e95:0x11b},_0x2b7035=_0x1d0aa9;return this[_0x2b7035(_0x1cd7cd._0x180e95)][_0x2b7035(0xfe)]();}[_0x1d0aa9(0x12d)](_0x2a6550){const _0x3ad365={_0x2f14ed:0x11b},_0xa1228f=_0x1d0aa9;return this[_0xa1228f(_0x3ad365._0x2f14ed)][_0xa1228f(0xfe)]()['filter'](_0x682d3a=>_0x682d3a[_0xa1228f(0xc9)]===_0x2a6550);}};export{FakeWebDriver};
@@ -1,10 +1,13 @@
1
1
  import { i as LocatorValue, W as WebDriver, D as DriverContext, d as DriverPage } from '../interfaces-dbZG10RS.js';
2
2
  export { j as LocatorStep, k as appendStep, l as describeLocator, m as isLocatorValue, r as rootedAt } from '../interfaces-dbZG10RS.js';
3
3
  import { Matcher, RegexLiteral } from '@unotest/protocol';
4
- import { Statement, BlockStatement } from '@unotest/dsl';
4
+ import { ExecutionWalker, ExecutionEvent, RunResult, RunOptions } from '@unotest/dsl/executor';
5
+ export { ExecutionError, ExecutionEvent, RunOptions, RunResult } from '@unotest/dsl/executor';
5
6
  import { SandboxConfig } from '../config/schema.js';
7
+ import { RuntimeExecState } from '@unotest/core';
6
8
  export { L as LintDiagnostic, b as LintOptions, a as LintSeverity, l as lintAst } from '../linter-CM2CpIyW.js';
7
9
  import 'zod';
10
+ import '@unotest/dsl';
8
11
 
9
12
  /** Test/codegen convenience: build a RegexLiteral inline. The DSL
10
13
  * parser produces these for `/pattern/flags` literals at runtime;
@@ -65,83 +68,6 @@ declare function chainGetByTitle(loc: LocatorValue, text: Matcher, options?: {
65
68
  exact?: boolean;
66
69
  }): LocatorValue;
67
70
 
68
- interface ExecutionError {
69
- message: string;
70
- /** Error class name (e.g. "AssertionError", "LocatorError"). Lets consumers
71
- * classify failure vs. infra error without parsing the message. */
72
- name?: string;
73
- stack?: string;
74
- /** Path to a screenshot saved on failure (driver-side). */
75
- screenshotPath?: string;
76
- /** Path to the a11y / semantic-dom snapshot saved on failure. */
77
- snapshotPath?: string;
78
- /** Optional rich detail (top-3 NearMisses, etc.). Free-form for the explainer. */
79
- details?: unknown;
80
- }
81
- type ExecutionEvent = {
82
- kind: 'step-start';
83
- node: Statement;
84
- file: string;
85
- line: number;
86
- col: number;
87
- callStack?: readonly string[];
88
- } | {
89
- kind: 'step-end';
90
- node: Statement;
91
- file: string;
92
- line: number;
93
- col: number;
94
- ok: true;
95
- callStack?: readonly string[];
96
- } | {
97
- kind: 'step-end';
98
- node: Statement;
99
- file: string;
100
- line: number;
101
- col: number;
102
- ok: false;
103
- error: ExecutionError;
104
- callStack?: readonly string[];
105
- } | {
106
- kind: 'paused';
107
- reason: 'step' | 'failure' | 'breakpoint';
108
- file: string;
109
- line: number;
110
- col: number;
111
- };
112
- interface RunOptions {
113
- /** "auto" = run until completion / failure. "step" = pause after each statement. */
114
- mode: 'auto' | 'step';
115
- /** When true, on uncaught error we emit `paused: 'failure'` instead of throwing. */
116
- pauseOnFailure: boolean;
117
- /** Safety budget — abort with synthetic failure if exceeded. */
118
- maxSteps?: number;
119
- /** Wall-clock budget — same semantics. */
120
- maxDurationMs?: number;
121
- /** Maximum user-function nesting depth. Default 32. Guards against runaway
122
- * recursion that wouldn't trip `maxSteps` (deep expression-tree calls). */
123
- maxCallDepth?: number;
124
- /** Mutable set of "line:col" keys. Executor checks membership before each
125
- * statement; on hit, emits `paused: 'breakpoint'`. set-bp/clear-bp commands
126
- * from the debug-commands-watcher mutate this set in place — same instance
127
- * reference is shared with the watcher. */
128
- breakpoints?: Set<string>;
129
- /** Ref-object atomic flag for "pause on next statement". The pause-command
130
- * watcher sets `value = true`; the executor reads it at every step-start,
131
- * yields `paused: 'step'` if set, and resets to false. Ref-object (not raw
132
- * boolean) so the watcher's mutation is visible to the executor without
133
- * re-passing options. */
134
- pauseRequested?: {
135
- value: boolean;
136
- };
137
- }
138
- interface RunResult {
139
- outcome: 'completed' | 'failed' | 'aborted';
140
- stepsExecuted: number;
141
- durationMs: number;
142
- error?: ExecutionError;
143
- }
144
-
145
71
  /** Read-only lookup over external scenario variables. */
146
72
  interface VariableStore {
147
73
  has(name: string): boolean;
@@ -237,34 +163,11 @@ declare class FunctionRegistry {
237
163
  names(): string[];
238
164
  }
239
165
 
240
- declare class AstExecutor {
241
- private readonly registry;
166
+ declare class AstExecutor extends ExecutionWalker<TestRuntime> {
242
167
  constructor(registry: FunctionRegistry);
243
- private entryFile;
244
- private fnFile;
245
- /** Project-root-relative posix file the current step lives in: origin of
246
- * the innermost user-function frame, else the entry file. `callStack`
247
- * only ever holds user-function names (pushed in callUserFunction), so
248
- * every frame has a `fnFile` entry; the `?? entryFile` is a defensive
249
- * fallback, not a normal path. */
250
- private fileForStack;
251
- run(program: BlockStatement, testName: string, runtime: TestRuntime, opts: RunOptions, helpers?: BlockStatement[], entryFile?: string, fnFile?: ReadonlyMap<string, string>): AsyncGenerator<ExecutionEvent, RunResult>;
252
- private runBlock;
253
- private runStatement;
254
- private execStatement;
255
- private evalExpression;
256
- private callUserFunction;
257
- private runLoop;
258
- /** Run one loop-body pass. Returns `true` if a `break` fired (caller stops
259
- * the loop), `false` for normal completion or `continue` (both end this
260
- * iteration the same way). Each pass counts as a step so an empty-bodied
261
- * infinite loop still trips `maxSteps`; `checkBudgets` enforces wall-clock. */
262
- private runLoopIteration;
263
- private applyIncrement;
264
- private checkBudgets;
265
168
  }
266
169
 
267
- type RuntimeState = 'starting' | 'running' | 'paused-step' | 'paused-failure' | 'completed' | 'failed' | 'aborted';
170
+ type RuntimeState = RuntimeExecState;
268
171
  interface ActiveRuntime {
269
172
  id: string;
270
173
  scenarioName: string;
@@ -322,6 +225,14 @@ interface TestRuntimeManagerDeps {
322
225
  declare class TestRuntimeManager {
323
226
  private readonly deps;
324
227
  private readonly runtimes;
228
+ /** Final snapshot of recently-aborted runtimes. `abort()` removes the live
229
+ * runtime from `runtimes`, so a trailing `inspect()` (the runtime-state
230
+ * writer's final flush, or the agent reading after `abort_runtime`) would
231
+ * otherwise miss the terminal `aborted` state and report the stale pre-abort
232
+ * `paused-*`. We keep the captured terminal snapshot here so inspect reflects
233
+ * `aborted`. Bounded — only the last few matter (a writer flushes once). */
234
+ private readonly terminalTombstones;
235
+ private static readonly MAX_TOMBSTONES;
325
236
  private nextId;
326
237
  constructor(deps: TestRuntimeManagerDeps);
327
238
  register(opts: {
@@ -335,6 +246,9 @@ declare class TestRuntimeManager {
335
246
  step(id: string): Promise<ExecutionEvent | RunResult>;
336
247
  resume(id: string): Promise<ExecutionEvent | RunResult>;
337
248
  abort(id: string): Promise<void>;
249
+ /** Snapshot a just-aborted (still-live) runtime into the tombstone map so a
250
+ * later inspect() reflects `aborted`. Bounded LRU; best-effort. */
251
+ private rememberTombstone;
338
252
  inspect(id: string): RuntimeSnapshot;
339
253
  /** The live active page of a runtime — used by the locator picker to
340
254
  * attach its overlay to the page held open during a debug pause.
@@ -352,4 +266,4 @@ declare class TestRuntimeManager {
352
266
  /** Build a fully-populated FunctionRegistry. */
353
267
  declare function buildDefaultRegistry(): FunctionRegistry;
354
268
 
355
- export { AstExecutor, type DslArg, type DslArray, type DslFunction, type DslObject, type DslValue, type ExecutionError, type ExecutionEvent, FunctionRegistry, LocatorValue, type RunOptions, type RunResult, TestRuntime, TestRuntimeManager, buildDefaultRegistry, chainGetByAltText, chainGetByLabel, chainGetByPlaceholder, chainGetByRole, chainGetByTestId, chainGetByText, chainGetByTitle, contentFrame, filter, first, getByAltText, getByLabel, getByPlaceholder, getByRole, getByTestId, getByText, getByTitle, last, locator, nth, re };
269
+ export { AstExecutor, type DslArg, type DslArray, type DslFunction, type DslObject, type DslValue, FunctionRegistry, LocatorValue, TestRuntime, TestRuntimeManager, buildDefaultRegistry, chainGetByAltText, chainGetByLabel, chainGetByPlaceholder, chainGetByRole, chainGetByTestId, chainGetByText, chainGetByTitle, contentFrame, filter, first, getByAltText, getByLabel, getByPlaceholder, getByRole, getByTestId, getByText, getByTitle, last, locator, nth, re };