@unotest/protocol 0.20.0 → 0.22.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.22.0] - 2026-08-26
4
+
5
+ ## [0.21.0] - 2026-08-25
6
+
7
+ ### Minor Changes
8
+
9
+ - 174d27e: feat: environments are first-class in the viewer — a switcher, per-env run history
10
+
11
+ **Run artifacts are laid out per environment, as folders.** Each
12
+ environment's history lives in its own root, mirroring the env-file
13
+ scheme: `unotest/.runs` (base), `unotest/.runs.<env>` (e.g.
14
+ `.runs.staging` for `--env staging` / `UNOTEST_ENV=staging`); the axes
15
+ compose — `.runs-mobile.staging`. Indexes (`_day.jsonl`, `_latest.json`)
16
+ are per-env automatically: switching environments is a change of root,
17
+ not a filter and not a rebuild. Old runs stay in `.runs` (= base), no
18
+ migration needed. `runsDirFor` / `projectRunsRoot` / `projectRunDirFor`
19
+ gained an optional `envName` parameter; the run manifest carries `env`
20
+ for self-description. Make sure your `.gitignore` uses the wildcard
21
+ form — `unotest/.runs*/` (`init` already writes it that way for new
22
+ projects).
23
+
24
+ **The viewer knows about environments.** A new switcher sits at the top
25
+ of the Variables panel and in the status bar: base plus every
26
+ environment discovered from `unotest/.env.<name>` / `.secrets.<name>`
27
+ (`.env.example` and other templates do not count). The active
28
+ environment is server-side (`GET/POST /api/environments`), and all tabs
29
+ converge via the `env:changed` WS message:
30
+
31
+ - the Variables panel shows layers WITH the active environment's
32
+ overlay (previously base only); values coming from `.env.<name>`
33
+ carry a badge; an edit goes to the file where the key is defined; new
34
+ variables go to base;
35
+ - Overview and the Runs list show only the active environment — tiles
36
+ are colored by the latest run in that environment;
37
+ - a run started from the viewer gets the active environment's
38
+ `UNOTEST_ENV` (`RunRequest.env` is a per-request override);
39
+ - a run opened from another environment still resolves by runId across
40
+ all `.runs*` roots.
41
+
42
+ MCP: `run_test {env}` already switched the child process's environment;
43
+ its artifacts are now correctly found by the server in `.runs.<env>`
44
+ (inspect/step/attach/list_runtimes scan all roots).
45
+
46
+ Four fixes uncovered while shaking this down:
47
+
48
+ - **The `--env` overlay actually reaches the run.** Long-lived hosts
49
+ (viewer, MCP server) flattened the base `.env` into their own
50
+ `process.env` on `loadConfig`; children inherited it as ambient
51
+ (ambient beats files) — the overlay's `APP_BASE_URL` was silently
52
+ clobbered by the base value. The viewer now rolls its env back after
53
+ loading the config; MCP spawns children from a clean pre-flatten
54
+ snapshot.
55
+ - **Pause/Abort from the viewer work again.** Debug commands were
56
+ written to the flat `<root>/<runId>/commands.jsonl`, while runs have
57
+ lived in date shards since 0.19 — the write 404'd and abort was
58
+ silently ignored. Order fixed too: SIGTERM to the own process first
59
+ (tests AND collections), then the command file.
60
+ - **A collection no longer "dies" in the UI after 30 seconds.** The
61
+ parent run wrote no heartbeat — the monitor declared it interrupted,
62
+ the row vanished from ACTIVE and the tail detached. The orchestrator
63
+ now maintains the heartbeat (shared machinery in `@unotest/core`),
64
+ and the viewer additionally treats a flowing steps.jsonl as a sign of
65
+ life (compatibility with older runners).
66
+ - **No phantom `failed` after a clean exit.** The "child exited without
67
+ artifacts" check looked at the flat path and fired bogus
68
+ `run-finished: failed` events plus an error toast on every exit.
69
+
3
70
  ## [0.20.0] - 2026-08-24
4
71
 
5
72
  ### Minor Changes
@@ -134,14 +201,14 @@
134
201
 
135
202
  ### Patch Changes
136
203
 
137
- - 01fa3c7: Run-id: случайный суффикс расширен с 6 до 12 hex-символов.
204
+ - 01fa3c7: Run-id: the random suffix grew from 6 to 12 hex characters.
138
205
 
139
- 24 бита давали ~3% шанс коллизии на тысяче id в одной миллисекунде — это
140
- падало в тестах и означало бы два прогона в одном каталоге. С 48 битами
141
- тот же случай — порядка 1e-9.
206
+ 24 bits gave a ~3% collision chance across a thousand ids within one
207
+ millisecond — that failed in tests and would have meant two runs sharing
208
+ one directory. With 48 bits the same case is on the order of 1e-9.
142
209
 
143
- Формат остаётся `<name>-<base36-ts>-<hex>`, меняется только длина
144
- последнего сегмента; ничего его не разбирает.
210
+ The format stays `<name>-<base36-ts>-<hex>`; only the length of the last
211
+ segment changes, and nothing parses it.
145
212
 
146
213
  ## [0.16.0] - 2026-08-19
147
214
 
package/dist/index.d.ts CHANGED
@@ -45,8 +45,18 @@ declare const RUNS_SUBDIR = ".runs";
45
45
  declare const SNAPSHOTS_SUBDIR = ".snapshots";
46
46
  /** Scenario tree under `unotest/`: `e2e` / `e2e-mobile`. */
47
47
  declare function testDirFor(suffix: string): string;
48
- /** Run-artifact root under `unotest/`: `.runs` / `.runs-mobile`. */
49
- declare function runsDirFor(suffix: string): string;
48
+ /** Run-artifact root under `unotest/`. Two axes, mirroring the env-file
49
+ * naming below: TARGET (dash) and ENVIRONMENT (dot) — `.runs`,
50
+ * `.runs-mobile`, `.runs.staging`, `.runs-mobile.staging`. Splitting
51
+ * runs by directory (rather than tagging each record with an env field)
52
+ * keeps every derived index per-environment for free: switching the
53
+ * environment is a change of root, never a filter or a rebuild. */
54
+ declare function runsDirFor(suffix: string, envName?: string): string;
55
+ /** True for directory names under `unotest/` that hold run artifacts for
56
+ * ANY target/environment combination (`.runs`, `.runs-mobile`,
57
+ * `.runs.staging`, …). Lets a reader resolve a runId it did not place
58
+ * without knowing which axis values exist. */
59
+ declare function isRunsDirName(name: string): boolean;
50
60
  /** `UNOTEST_DEBUG` artifact root under `unotest/`: `.debug` /
51
61
  * `.debug-mobile`. */
52
62
  declare function debugDirFor(suffix: string): string;
@@ -129,6 +139,12 @@ declare function secretsLayerFilesFor(suffix: string, envName?: string): string[
129
139
  /** Read an environment name from a process-env-like record (`UNOTEST_ENV`),
130
140
  * normalising empty/blank to `undefined` (= base only). */
131
141
  declare function activeEnvName(env: Record<string, string | undefined>): string | undefined;
142
+ /** Environment names available to a target, derived from a directory
143
+ * listing of `unotest/` (fs stays with the caller — this module is
144
+ * bundled for the browser). A name counts when ANY overlay layer for the
145
+ * target exists: `.env.<name>`, `.env<suffix>.<name>`, or the `.secrets`
146
+ * equivalents. Sorted, deduped, template names excluded. */
147
+ declare function envNamesFromDirListing(fileNames: string[], suffix: string): string[];
132
148
 
133
149
  interface RegexLiteral {
134
150
  readonly kind: "regex";
@@ -183,12 +199,13 @@ declare class UnplaceableRunIdError extends Error {
183
199
  * Throws instead of returning null so a writer can never quietly invent
184
200
  * a location and split one run across two layouts. */
185
201
  declare function requireRunDirFor(runsRoot: string, runId: string): string;
186
- /** Project-relative runs root for a target: `unotest/.runs<suffix>`. */
187
- declare function projectRunsRoot(suffix?: string): string;
202
+ /** Project-relative runs root for a target + environment:
203
+ * `unotest/.runs<suffix>[.<env>]`. */
204
+ declare function projectRunsRoot(suffix?: string, envName?: string): string;
188
205
  /** Project-relative directory of one run, shard included. The single
189
206
  * place that knows how a run id becomes a path — every writer and reader
190
207
  * goes through here, so the layout cannot drift between them. */
191
- declare function projectRunDirFor(runId: string, suffix?: string): string;
208
+ declare function projectRunDirFor(runId: string, suffix?: string, envName?: string): string;
192
209
  /** Day directory: `<runsRoot>/YYYY/MM/DD`. */
193
210
  declare function shardDirFor(runsRoot: string, ms: number): string;
194
211
  /** Walk day-shard paths backwards from `fromMs`, newest first. Used by
@@ -575,6 +592,11 @@ interface ScenarioRunRequest {
575
592
  /** Inline breakpoint override as `"line:col"` strings. Only honored
576
593
  * when `debug=true`. */
577
594
  breakpoints?: string[];
595
+ /** Environment name (`.env.<name>` overlay + `.runs<suffix>.<name>`
596
+ * artifact root). Absent = base. The spawner sets `UNOTEST_ENV` from
597
+ * this EXPLICITLY (clearing it when absent) so the child never
598
+ * inherits a stray value from the viewer process. */
599
+ env?: string;
578
600
  }
579
601
  /** Run a collection — the runner's CLI orchestrates scenarios inside.
580
602
  * Viewer doesn't see the per-scenario subprocesses; it sees one direct
@@ -591,6 +613,8 @@ interface CollectionRunRequest {
591
613
  workers?: number;
592
614
  /** Stop on first failure. Default `false` (continue-on-fail). */
593
615
  bail?: boolean;
616
+ /** Environment name — see `ScenarioRunRequest.env`. */
617
+ env?: string;
594
618
  }
595
619
  /** Open a live AUTHORING-HOLD session (collaborative model, U1/U3): a
596
620
  * headed shared browser + draft stay open with NO running test; the human
@@ -602,6 +626,8 @@ interface AuthoringRunRequest {
602
626
  scenario: string;
603
627
  /** Authoring is visible by default — the human must see the live browser. */
604
628
  headed?: boolean;
629
+ /** Environment name — see `ScenarioRunRequest.env`. */
630
+ env?: string;
605
631
  }
606
632
  /** Discriminated union of every run-shape the viewer can request. */
607
633
  type RunRequest = ScenarioRunRequest | CollectionRunRequest | AuthoringRunRequest;
@@ -779,6 +805,10 @@ interface RunManifest {
779
805
  /** Wallclock at runner start. Distinct from the first event's `t`
780
806
  * (which may have leading delay for adapter setup). */
781
807
  startedAt: number;
808
+ /** Environment name the run resolved (`UNOTEST_ENV` / `--env`), absent
809
+ * for base. Self-description only — placement already encodes it (the
810
+ * run lives under `.runs<suffix>.<env>`), so nothing filters on this. */
811
+ env?: string;
782
812
  /** Opt-in artifact-capture flags as resolved from the runner's env at
783
813
  * start (`UNOTEST_CONSOLE` / `UNOTEST_NETWORK`). Recorded here so the
784
814
  * viewer can tell "capture was disabled" apart from "capture was on but
@@ -1392,6 +1422,14 @@ interface FsRunFinishedMessage {
1392
1422
  runId: RunId;
1393
1423
  outcome: RunOutcome;
1394
1424
  }
1425
+ /** Emitted when the server's ACTIVE ENVIRONMENT switches (or the set of
1426
+ * available environments changes on disk). Clients refetch
1427
+ * `/api/environments` plus everything env-scoped: variables, runs,
1428
+ * latest index. `env` is the new active name, absent for base. */
1429
+ interface EnvChangedMessage {
1430
+ kind: "env:changed";
1431
+ env?: string;
1432
+ }
1395
1433
  /** A single line of stdout or stderr captured from a runner child the
1396
1434
  * viewer-server spawned. Logs always carry a `runId` so the browser
1397
1435
  * attaches them to the right run-pane. */
@@ -1409,7 +1447,7 @@ interface ErrorMessage {
1409
1447
  message: string;
1410
1448
  }
1411
1449
  /** Discriminated union of every WS message the server emits to clients. */
1412
- type WsMessage = FsScenariosChangedMessage | FsHelpersChangedMessage | FsCollectionsChangedMessage | FsBreakpointsChangedMessage | FsRunStartedMessage | FsRunStepMessage | FsCollectionRunStepMessage | FsRunFinishedMessage | LogLineMessage | ErrorMessage;
1450
+ type WsMessage = FsScenariosChangedMessage | FsHelpersChangedMessage | FsCollectionsChangedMessage | FsBreakpointsChangedMessage | FsRunStartedMessage | FsRunStepMessage | FsCollectionRunStepMessage | FsRunFinishedMessage | EnvChangedMessage | LogLineMessage | ErrorMessage;
1413
1451
  /** All WS message `kind` literals as a union type — useful for handler
1414
1452
  * registries (`Record<WsMessageKind, Handler>`). */
1415
1453
  type WsMessageKind = WsMessage["kind"];
@@ -1553,4 +1591,4 @@ interface RuntimeStateFile {
1553
1591
  updatedAt: number;
1554
1592
  }
1555
1593
 
1556
- export { type AddVariablePlan, type AddVariablePlanInput, type AppPathPickerSpec, type AppServerEvent, type AuthoringRunRequest, BLOBS_DIR, type BreakpointEntry, type BreakpointsFile, COLLECTIONS_SUBDIR, COLLECTION_NAME_FORBIDDEN_RE, COMMANDS_FILE, type CheckSeverity, type CollectionMeta, type CollectionRunArtifact, type CollectionRunFinishedEvent, type CollectionRunRequest, type CollectionRunStartedEvent, type CollectionRunTab, type CollectionScenarioFinishedEvent, type CollectionScenarioStartedEvent, type CollectionTab, DAY_INDEX_FILE, type DbgCommand, type DbgCommandAbort, type DbgCommandClearBp, type DbgCommandContinue, type DbgCommandKind, type DbgCommandPause, type DbgCommandPickerStart, type DbgCommandPickerStop, type DbgCommandProbe, type DbgCommandRecord, type DbgCommandSetBp, type DbgCommandSnapshot, type DbgCommandStep, type DbgCommandWheel, type DebugCapabilities, type DoctorCheck, type DoctorContext, type DslDiagnostic, type DslValidateContext, type DslVocabArg, type DslVocabCategory, type DslVocabEntry, E2E_SUBDIR, ENV_FILE, EXPECT_FAIL_ANNOTATION, type EnvFile, type EnvUpdate, type EnvVar, type ErrorMessage, type FailureBundleWrittenEvent, type FsBreakpointsChangedMessage, type FsCollectionRunStepMessage, type FsCollectionsChangedMessage, type FsHelpersChangedMessage, type FsRunFinishedMessage, type FsRunStartedMessage, type FsRunStepMessage, type FsScenariosChangedMessage, HEARTBEAT_FILE, HELPERS_SUBDIR, type HelperMeta, type HelperTab, type HostRequirement, type IDslLanguageService, type ILaunchedProcess, type IProcessLauncher, type IRunnerAdapter, InvalidBlobHashError, LOCK_FILE, LOG_FILE, type LaunchSpec, type LocatorPickedEvent, type LockFile, type LogLineMessage, type Matcher, PICKER_SNAPSHOT_FILE, type PausedEvent, type PickerMode, type ProbeMatch, type ProbePinned, type ProbeResult, type ProbeResultEvent, RUNNER_CONFIG_KEYS, RUNS_SUBDIR, RUNTIME_FILE, RUN_INDEX_SCHEMA_VERSION, RUN_MANIFEST_FILE, RUN_SOURCES_FILE, type RecordedActionKind, type RegexLiteral, type ResumedEvent, type RunArtifact, type RunFinishedEvent, type RunId, type RunIndexEntry, type RunIndexHeader, type RunKind, type RunManifest, type RunMeta, type RunOutcome, type RunRequest, type RunSources, type RunStartedEvent, type RunStatus, RunnerAdapterNotFoundError, RunnerNotConfiguredError, type RuntimeState, type RuntimeStateFile, SCENARIOS_INDEX_DIR, SCENARIOS_LATEST_FILE, SCENARIO_RECENT_WINDOW, SECRETS_FILE, SEGMENT_NAME_FORBIDDEN_RE, SNAPSHOTS_SUBDIR, STDERR_FILE, STDOUT_FILE, STEPS_FILE, type ScenarioAnnotations, type ScenarioLatestEntry, type ScenarioMeta, type ScenarioRunRequest, type ScenarioRunTab, type ScenarioTab, type ScenariosLatest, type ScenariosPayload, type ScreenshotEvent, type SnapshotTab, type StepFailEvent, type StepOkEvent, type StepStartedEvent, TERMINAL_RUNTIME_STATES, TERMINAL_WS_EVENT, type TabKind, type TabKindName, type TerminalClientMessage, type TerminalCloseMessage, type TerminalDataMessage, type TerminalErrorMessage, type TerminalExitMessage, type TerminalKind, type TerminalOutputMessage, type TerminalResizeMessage, type TerminalServerMessage, type TerminalSpawnMessage, type ToolCallEvent, type ToolResultEvent, UNOTEST_DIR, UnplaceableRunIdError, UnsupportedRunKindError, type VariableCategory, type VariableKind, type VariablePlanError, type WheelChangedEvent, type WsMessage, type WsMessageKind, activeEnvName, blobPathFor, blobRelPathFor, blobRelSegmentsFor, blobsRootFor, categorizeVariable, debugDirFor, debuggerFileFor, deleteShadowWarning, envFileFor, envKeys, envLayerFilesFor, foldScenarioRun, insertEnvVar, isAnnotationLine, isExternalVarName, isFailingStatus, isRegexLiteral, isRunnerConfigKey, isTerminalRuntimeState, makeRunId, parseAppServerEvent, parseEnvContent, parseScenarioAnnotations, planAddVariable, projectRunDirFor, projectRunsRoot, regexLiteral, removeEnvVar, requireRunDirFor, runDirFor, runIdStartedAt, runsDirFor, sanitizeRunIdSegment, scenarioIndexFileName, scenarioRefFromFileName, secretsFileFor, secretsLayerFilesFor, serializeEnvValue, shardDaysDescending, shardDirFor, shardPathForRunId, shardPathForTimestamp, testDirFor, validateCollectionName, validateSegmentName };
1594
+ export { type AddVariablePlan, type AddVariablePlanInput, type AppPathPickerSpec, type AppServerEvent, type AuthoringRunRequest, BLOBS_DIR, type BreakpointEntry, type BreakpointsFile, COLLECTIONS_SUBDIR, COLLECTION_NAME_FORBIDDEN_RE, COMMANDS_FILE, type CheckSeverity, type CollectionMeta, type CollectionRunArtifact, type CollectionRunFinishedEvent, type CollectionRunRequest, type CollectionRunStartedEvent, type CollectionRunTab, type CollectionScenarioFinishedEvent, type CollectionScenarioStartedEvent, type CollectionTab, DAY_INDEX_FILE, type DbgCommand, type DbgCommandAbort, type DbgCommandClearBp, type DbgCommandContinue, type DbgCommandKind, type DbgCommandPause, type DbgCommandPickerStart, type DbgCommandPickerStop, type DbgCommandProbe, type DbgCommandRecord, type DbgCommandSetBp, type DbgCommandSnapshot, type DbgCommandStep, type DbgCommandWheel, type DebugCapabilities, type DoctorCheck, type DoctorContext, type DslDiagnostic, type DslValidateContext, type DslVocabArg, type DslVocabCategory, type DslVocabEntry, E2E_SUBDIR, ENV_FILE, EXPECT_FAIL_ANNOTATION, type EnvChangedMessage, type EnvFile, type EnvUpdate, type EnvVar, type ErrorMessage, type FailureBundleWrittenEvent, type FsBreakpointsChangedMessage, type FsCollectionRunStepMessage, type FsCollectionsChangedMessage, type FsHelpersChangedMessage, type FsRunFinishedMessage, type FsRunStartedMessage, type FsRunStepMessage, type FsScenariosChangedMessage, HEARTBEAT_FILE, HELPERS_SUBDIR, type HelperMeta, type HelperTab, type HostRequirement, type IDslLanguageService, type ILaunchedProcess, type IProcessLauncher, type IRunnerAdapter, InvalidBlobHashError, LOCK_FILE, LOG_FILE, type LaunchSpec, type LocatorPickedEvent, type LockFile, type LogLineMessage, type Matcher, PICKER_SNAPSHOT_FILE, type PausedEvent, type PickerMode, type ProbeMatch, type ProbePinned, type ProbeResult, type ProbeResultEvent, RUNNER_CONFIG_KEYS, RUNS_SUBDIR, RUNTIME_FILE, RUN_INDEX_SCHEMA_VERSION, RUN_MANIFEST_FILE, RUN_SOURCES_FILE, type RecordedActionKind, type RegexLiteral, type ResumedEvent, type RunArtifact, type RunFinishedEvent, type RunId, type RunIndexEntry, type RunIndexHeader, type RunKind, type RunManifest, type RunMeta, type RunOutcome, type RunRequest, type RunSources, type RunStartedEvent, type RunStatus, RunnerAdapterNotFoundError, RunnerNotConfiguredError, type RuntimeState, type RuntimeStateFile, SCENARIOS_INDEX_DIR, SCENARIOS_LATEST_FILE, SCENARIO_RECENT_WINDOW, SECRETS_FILE, SEGMENT_NAME_FORBIDDEN_RE, SNAPSHOTS_SUBDIR, STDERR_FILE, STDOUT_FILE, STEPS_FILE, type ScenarioAnnotations, type ScenarioLatestEntry, type ScenarioMeta, type ScenarioRunRequest, type ScenarioRunTab, type ScenarioTab, type ScenariosLatest, type ScenariosPayload, type ScreenshotEvent, type SnapshotTab, type StepFailEvent, type StepOkEvent, type StepStartedEvent, TERMINAL_RUNTIME_STATES, TERMINAL_WS_EVENT, type TabKind, type TabKindName, type TerminalClientMessage, type TerminalCloseMessage, type TerminalDataMessage, type TerminalErrorMessage, type TerminalExitMessage, type TerminalKind, type TerminalOutputMessage, type TerminalResizeMessage, type TerminalServerMessage, type TerminalSpawnMessage, type ToolCallEvent, type ToolResultEvent, UNOTEST_DIR, UnplaceableRunIdError, UnsupportedRunKindError, type VariableCategory, type VariableKind, type VariablePlanError, type WheelChangedEvent, type WsMessage, type WsMessageKind, activeEnvName, blobPathFor, blobRelPathFor, blobRelSegmentsFor, blobsRootFor, categorizeVariable, debugDirFor, debuggerFileFor, deleteShadowWarning, envFileFor, envKeys, envLayerFilesFor, envNamesFromDirListing, foldScenarioRun, insertEnvVar, isAnnotationLine, isExternalVarName, isFailingStatus, isRegexLiteral, isRunnerConfigKey, isRunsDirName, isTerminalRuntimeState, makeRunId, parseAppServerEvent, parseEnvContent, parseScenarioAnnotations, planAddVariable, projectRunDirFor, projectRunsRoot, regexLiteral, removeEnvVar, requireRunDirFor, runDirFor, runIdStartedAt, runsDirFor, sanitizeRunIdSegment, scenarioIndexFileName, scenarioRefFromFileName, secretsFileFor, secretsLayerFilesFor, serializeEnvValue, shardDaysDescending, shardDirFor, shardPathForRunId, shardPathForTimestamp, testDirFor, validateCollectionName, validateSegmentName };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- const _0x26a9f7=_0x50d8;(function(_0x1f4776,_0xd60d20){const _0xf48938={_0x4828c5:0x1dc,_0x1f23d6:0x160,_0x342044:0x1d3,_0x163c9d:0x17d,_0x5c07b9:0x15a,_0x2c9de2:0x156,_0x4837df:0x14f},_0x1a9553=_0x50d8,_0x39c210=_0x1f4776();while(!![]){try{const _0x215581=parseInt(_0x1a9553(_0xf48938._0x4828c5))/0x1+parseInt(_0x1a9553(_0xf48938._0x1f23d6))/0x2*(-parseInt(_0x1a9553(_0xf48938._0x342044))/0x3)+-parseInt(_0x1a9553(_0xf48938._0x163c9d))/0x4*(-parseInt(_0x1a9553(_0xf48938._0x5c07b9))/0x5)+-parseInt(_0x1a9553(_0xf48938._0x2c9de2))/0x6+parseInt(_0x1a9553(0x1d2))/0x7+-parseInt(_0x1a9553(0x16c))/0x8*(parseInt(_0x1a9553(_0xf48938._0x4837df))/0x9)+parseInt(_0x1a9553(0x198))/0xa;if(_0x215581===_0xd60d20)break;else _0x39c210['push'](_0x39c210['shift']());}catch(_0x7dd21){_0x39c210['push'](_0x39c210['shift']());}}}(_0x23ed,0x4a78f));var __defProp=Object[_0x26a9f7(0x190)],__name=(_0x3f8720,_0x26d93d)=>__defProp(_0x3f8720,_0x26a9f7(0x150),{'value':_0x26d93d,'configurable':!![]});function parseAppServerEvent(_0x244302){const _0x38d514={_0x5c04f2:0x1af,_0x224d58:0x153,_0x2a965c:0x153},_0x50741d=_0x26a9f7,_0x1ffe7e=_0x244302[_0x50741d(_0x38d514._0x5c04f2)]();if(!_0x1ffe7e[_0x50741d(0x16b)]('{'))return null;try{const _0x41a068=JSON['parse'](_0x1ffe7e);if(_0x41a068[_0x50741d(_0x38d514._0x224d58)]==='app-server:ready'||_0x41a068[_0x50741d(_0x38d514._0x2a965c)]===_0x50741d(0x167)||_0x41a068[_0x50741d(0x153)]===_0x50741d(0x13e))return _0x41a068;return null;}catch{return null;}}__name(parseAppServerEvent,_0x26a9f7(0x16e));var UNOTEST_DIR=_0x26a9f7(0x1d7),E2E_SUBDIR=_0x26a9f7(0x13f),HELPERS_SUBDIR=_0x26a9f7(0x185),COLLECTIONS_SUBDIR=_0x26a9f7(0x1ab),RUNS_SUBDIR=_0x26a9f7(0x178),SNAPSHOTS_SUBDIR=_0x26a9f7(0x1d0);function testDirFor(_0x423b4d){return''+E2E_SUBDIR+_0x423b4d;}__name(testDirFor,_0x26a9f7(0x1a1));function runsDirFor(_0x4e7bfb){return''+RUNS_SUBDIR+_0x4e7bfb;}__name(runsDirFor,'runsDirFor');function debugDirFor(_0x526064){return'.debug'+_0x526064;}__name(debugDirFor,_0x26a9f7(0x1c9));function debuggerFileFor(_0x209ba2){const _0x52d8a3={_0x19755d:0x1c3},_0x58fe30=_0x26a9f7;return UNOTEST_DIR+_0x58fe30(_0x52d8a3._0x19755d)+_0x209ba2+_0x58fe30(0x13a);}__name(debuggerFileFor,_0x26a9f7(0x15e));var LOCK_FILE=_0x26a9f7(0x163),LOG_FILE='.viewer.log',STEPS_FILE=_0x26a9f7(0x176),HEARTBEAT_FILE=_0x26a9f7(0x17c),DAY_INDEX_FILE=_0x26a9f7(0x170),SCENARIOS_INDEX_DIR='_scenarios',SCENARIOS_LATEST_FILE='_latest.json',STDOUT_FILE=_0x26a9f7(0x1bf),STDERR_FILE=_0x26a9f7(0x191),COMMANDS_FILE='commands.jsonl',RUNTIME_FILE='runtime.json',PICKER_SNAPSHOT_FILE=_0x26a9f7(0x169),ENV_FILE=_0x26a9f7(0x1db),SECRETS_FILE='unotest/.secrets';function envFileFor(_0x169959,_0x205168){return''+ENV_FILE+_0x169959+(_0x205168?'.'+_0x205168:'');}__name(envFileFor,_0x26a9f7(0x1aa));function secretsFileFor(_0x309da0,_0x231b3f){return''+SECRETS_FILE+_0x309da0+(_0x231b3f?'.'+_0x231b3f:'');}__name(secretsFileFor,_0x26a9f7(0x1d8));function envLayerFilesFor(_0x377358,_0x296a5e){return layersFor(ENV_FILE,_0x377358,_0x296a5e);}__name(envLayerFilesFor,_0x26a9f7(0x1ce));function secretsLayerFilesFor(_0x3213e6,_0x2229d9){return layersFor(SECRETS_FILE,_0x3213e6,_0x2229d9);}__name(secretsLayerFilesFor,_0x26a9f7(0x155));function layersFor(_0x24d1f4,_0x37a42a,_0x51fb33){const _0x3ce6dd={_0x13b6a6:0x162,_0x325ab4:0x162},_0x5bc778=_0x26a9f7,_0x40a12b=[_0x24d1f4];if(_0x37a42a)_0x40a12b[_0x5bc778(_0x3ce6dd._0x13b6a6)](''+_0x24d1f4+_0x37a42a);if(_0x51fb33){_0x40a12b[_0x5bc778(_0x3ce6dd._0x325ab4)](_0x24d1f4+'.'+_0x51fb33);if(_0x37a42a)_0x40a12b[_0x5bc778(0x162)](''+_0x24d1f4+_0x37a42a+'.'+_0x51fb33);}return _0x40a12b;}__name(layersFor,'layersFor');function activeEnvName(_0x3484f8){const _0x298a23=_0x26a9f7,_0x1d94e3=_0x3484f8['UNOTEST_ENV']?.[_0x298a23(0x1af)]();return _0x1d94e3?_0x1d94e3:void 0x0;}__name(activeEnvName,_0x26a9f7(0x1cf));function isRegexLiteral(_0x254fa4){const _0x1e363d=_0x26a9f7;return typeof _0x254fa4==='object'&&_0x254fa4!==null&&_0x254fa4['kind']===_0x1e363d(0x1c5)&&typeof _0x254fa4[_0x1e363d(0x1a6)]==='string'&&typeof _0x254fa4[_0x1e363d(0x139)]===_0x1e363d(0x1cd);}__name(isRegexLiteral,_0x26a9f7(0x140));function regexLiteral(_0x181b2c,_0x3bd0f6=''){const _0x3773bb=_0x26a9f7;return{'kind':_0x3773bb(0x1c5),'source':_0x181b2c,'flags':_0x3bd0f6};}__name(regexLiteral,_0x26a9f7(0x1ac));var RAND_BYTES=0x6;function makeRunId(_0x429123){const _0x317a5b={_0x27ec06:0x1b3,_0x8f9416:0x1a5,_0x30f642:0x1c2,_0x26d031:0x187},_0x34c0e3=_0x26a9f7,_0x11f8af=sanitizeRunIdSegment(_0x429123),_0x4c4990=Date[_0x34c0e3(0x154)]()[_0x34c0e3(0x1c2)](0x24),_0xd4d967=new Uint8Array(RAND_BYTES);globalThis[_0x34c0e3(_0x317a5b._0x27ec06)][_0x34c0e3(0x1cb)](_0xd4d967);let _0x577920='';for(let _0x252319=0x0;_0x252319<_0xd4d967[_0x34c0e3(_0x317a5b._0x8f9416)];_0x252319++){_0x577920+=_0xd4d967[_0x252319][_0x34c0e3(_0x317a5b._0x30f642)](0x10)[_0x34c0e3(_0x317a5b._0x26d031)](0x2,'0');}return _0x11f8af+'-'+_0x4c4990+'-'+_0x577920;}__name(makeRunId,_0x26a9f7(0x14d));function sanitizeRunIdSegment(_0x4281d9){const _0x465afe={_0x3663ec:0x1b9,_0x13f8eb:0x14a},_0x2e93e3=_0x26a9f7,_0x638f07=_0x4281d9[_0x2e93e3(0x1b9)](/[^a-zA-Z0-9_-]+/g,'-')[_0x2e93e3(0x1b9)](/-+/g,'-')[_0x2e93e3(_0x465afe._0x3663ec)](/^-|-$/g,'');return _0x638f07[_0x2e93e3(0x1a5)]>0x0?_0x638f07:_0x2e93e3(_0x465afe._0x13f8eb);}__name(sanitizeRunIdSegment,_0x26a9f7(0x19d));var RANDOM_SUFFIX_RE=/^[0-9a-f]{6,}$/,MIN_PLAUSIBLE_MS=Date[_0x26a9f7(0x175)](0x7e4,0x0,0x1),MAX_PLAUSIBLE_MS=Date[_0x26a9f7(0x175)](0x834,0x0,0x1);function runIdStartedAt(_0x255be4){const _0x3e32d2={_0x21ac2b:0x15c,_0x34abc9:0x18e,_0x3c3354:0x1a5},_0x2ecf28=_0x26a9f7,_0x3253fd=_0x255be4[_0x2ecf28(_0x3e32d2._0x21ac2b)]('-');if(_0x3253fd[_0x2ecf28(0x1a5)]<0x3)return null;const _0x3d5ac4=_0x3253fd[_0x3253fd[_0x2ecf28(0x1a5)]-0x1];if(!RANDOM_SUFFIX_RE[_0x2ecf28(_0x3e32d2._0x34abc9)](_0x3d5ac4))return null;const _0x1aa614=_0x3253fd[_0x3253fd[_0x2ecf28(_0x3e32d2._0x3c3354)]-0x2];if(!/^[0-9a-z]+$/[_0x2ecf28(_0x3e32d2._0x34abc9)](_0x1aa614))return null;const _0x1fb4fd=parseInt(_0x1aa614,0x24);if(!Number['isFinite'](_0x1fb4fd))return null;if(_0x1fb4fd<MIN_PLAUSIBLE_MS||_0x1fb4fd>=MAX_PLAUSIBLE_MS)return null;return _0x1fb4fd;}__name(runIdStartedAt,_0x26a9f7(0x189));function shardPathForTimestamp(_0x2a3270){const _0x1db2cc={_0x4f472b:0x187},_0x43497c=_0x26a9f7,_0x4d7a2e=new Date(_0x2a3270),_0x318e8e=String(_0x4d7a2e[_0x43497c(0x1b8)]())['padStart'](0x4,'0'),_0x4941b5=String(_0x4d7a2e['getUTCMonth']()+0x1)[_0x43497c(_0x1db2cc._0x4f472b)](0x2,'0'),_0x4af500=String(_0x4d7a2e[_0x43497c(0x18a)]())[_0x43497c(0x187)](0x2,'0');return _0x318e8e+'/'+_0x4941b5+'/'+_0x4af500;}__name(shardPathForTimestamp,'shardPathForTimestamp');function shardPathForRunId(_0x2f1a00){const _0x16ebd1=runIdStartedAt(_0x2f1a00);return _0x16ebd1===null?null:shardPathForTimestamp(_0x16ebd1);}__name(shardPathForRunId,_0x26a9f7(0x1ba));function runDirFor(_0x37769a,_0x2bade2){const _0x322370=shardPathForRunId(_0x2bade2);return _0x322370===null?null:_0x37769a+'/'+_0x322370+'/'+_0x2bade2;}__name(runDirFor,'runDirFor');var UnplaceableRunIdError=class extends Error{static{__name(this,_0x26a9f7(0x179));}constructor(_0xdfbc59){const _0x1e93d6={_0x96abe1:0x1ad,_0x385946:0x150},_0x37edab=_0x26a9f7;super(_0x37edab(_0x1e93d6._0x96abe1)+_0xdfbc59),this[_0x37edab(_0x1e93d6._0x385946)]='UnplaceableRunIdError';}};function requireRunDirFor(_0x38c6b0,_0x4d87f9){const _0x5e78d9=runDirFor(_0x38c6b0,_0x4d87f9);if(_0x5e78d9===null)throw new UnplaceableRunIdError(_0x4d87f9);return _0x5e78d9;}__name(requireRunDirFor,_0x26a9f7(0x1b5));function projectRunsRoot(_0x11207d=''){return UNOTEST_DIR+'/'+runsDirFor(_0x11207d);}__name(projectRunsRoot,_0x26a9f7(0x1c0));function projectRunDirFor(_0x6ccc56,_0x4e08ef=''){return requireRunDirFor(projectRunsRoot(_0x4e08ef),_0x6ccc56);}__name(projectRunDirFor,_0x26a9f7(0x18b));function shardDirFor(_0x1044c1,_0x347c42){return _0x1044c1+'/'+shardPathForTimestamp(_0x347c42);}__name(shardDirFor,'shardDirFor');function*shardDaysDescending(_0x2e57a6,_0x587df3,_0x43a097){const _0x369d65={_0x1882e8:0x1be},_0x35d6f2=_0x26a9f7,_0x50821e=0x5265c00;let _0x318b8a=Math[_0x35d6f2(_0x369d65._0x1882e8)](_0x587df3/_0x50821e)*_0x50821e;for(let _0x56f4fa=0x0;_0x56f4fa<_0x43a097;_0x56f4fa++){yield shardDirFor(_0x2e57a6,_0x318b8a),_0x318b8a-=_0x50821e;}}__name(shardDaysDescending,_0x26a9f7(0x194));var RUN_INDEX_SCHEMA_VERSION=0x2,SCENARIO_RECENT_WINDOW=0xc;function isFailingStatus(_0x3eb19b){const _0x187513=_0x26a9f7;return _0x3eb19b==='failed'||_0x3eb19b===_0x187513(0x17e);}__name(isFailingStatus,'isFailingStatus');function foldScenarioRun(_0x46e48a,_0x337906){const _0x38f33d={_0x55267a:0x15b,_0x854a2b:0x1b0,_0x28adc1:0x15b,_0x29c7e8:0x143},_0x1e7faf=_0x26a9f7,_0x14d182={'lastRunId':_0x337906['runId'],'lastStatus':_0x337906[_0x1e7faf(0x182)],'lastAt':_0x337906[_0x1e7faf(_0x38f33d._0x55267a)],'lastDurationMs':_0x337906['durationMs'],'recent':[..._0x46e48a?.['recent']??[],_0x337906['status']][_0x1e7faf(_0x38f33d._0x854a2b)](-SCENARIO_RECENT_WINDOW)};if(!isFailingStatus(_0x337906[_0x1e7faf(0x182)]))return{..._0x14d182,'failStreak':0x0,'failingSince':null};const _0x4ed884=(_0x46e48a?.[_0x1e7faf(0x164)]??0x0)+0x1;return{..._0x14d182,'failStreak':_0x4ed884,'failingSince':_0x4ed884===0x1?_0x337906[_0x1e7faf(_0x38f33d._0x28adc1)]:_0x46e48a?.[_0x1e7faf(_0x38f33d._0x29c7e8)]??_0x337906[_0x1e7faf(0x15b)]};}__name(foldScenarioRun,'foldScenarioRun');function scenarioIndexFileName(_0x3193cb){return encodeURIComponent(_0x3193cb)+'.jsonl';}__name(scenarioIndexFileName,'scenarioIndexFileName');function scenarioRefFromFileName(_0x238fea){const _0x332173={_0x4ebd4e:0x168},_0x466b18=_0x26a9f7;if(!_0x238fea[_0x466b18(0x1d9)](_0x466b18(0x168)))return null;try{return decodeURIComponent(_0x238fea[_0x466b18(0x1b0)](0x0,-_0x466b18(_0x332173._0x4ebd4e)[_0x466b18(0x1a5)]));}catch{return null;}}__name(scenarioRefFromFileName,_0x26a9f7(0x1b1));var BLOBS_DIR=_0x26a9f7(0x1d1),GENERATION_SEP='~',HASH_RE=/^[0-9a-f]{8,}$/,InvalidBlobHashError=class extends Error{static{__name(this,_0x26a9f7(0x18c));}constructor(_0x131747){const _0x3d265a={_0x59757f:0x18c},_0x2e13a9=_0x26a9f7;super('blob\x20hash\x20must\x20be\x20lowercase\x20hex,\x20got:\x20'+_0x131747),this['name']=_0x2e13a9(_0x3d265a._0x59757f);}};function blobPathFor(_0x36d382,_0x5bcc52,_0x533a40,_0x4c2044=0x0){return _0x36d382+'/'+blobRelPathFor(_0x5bcc52,_0x533a40,_0x4c2044);}__name(blobPathFor,_0x26a9f7(0x199));function blobRelSegmentsFor(_0x4bb78b,_0x4c31ee,_0x47d7dd=0x0){const _0x33b30a={_0x38c059:0x1b0},_0x178550=_0x26a9f7;if(!HASH_RE[_0x178550(0x18e)](_0x4bb78b))throw new InvalidBlobHashError(_0x4bb78b);const _0x4c9f1b=_0x47d7dd>0x0?''+GENERATION_SEP+_0x47d7dd:'';return[BLOBS_DIR,_0x4bb78b[_0x178550(0x1b0)](0x0,0x2),_0x4bb78b[_0x178550(_0x33b30a._0x38c059)](0x2,0x4),''+_0x4bb78b+_0x4c9f1b+'.'+_0x4c31ee];}__name(blobRelSegmentsFor,_0x26a9f7(0x166));function blobRelPathFor(_0x3beebe,_0x2934c1,_0x343efc=0x0){const _0x289efe={_0x51d214:0x1b6},_0x131b2b=_0x26a9f7;return blobRelSegmentsFor(_0x3beebe,_0x2934c1,_0x343efc)[_0x131b2b(_0x289efe._0x51d214)]('/');}function _0x50d8(_0x318b5c,_0x5c1012){_0x318b5c=_0x318b5c-0x138;const _0x23ed44=_0x23ed();let _0x50d882=_0x23ed44[_0x318b5c];if(_0x50d8['ggmuNn']===undefined){var _0x119f37=function(_0x5e8129){const _0x45894f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3f8720='',_0x26d93d='';for(let _0x244302=0x0,_0x1ffe7e,_0x41a068,_0x423b4d=0x0;_0x41a068=_0x5e8129['charAt'](_0x423b4d++);~_0x41a068&&(_0x1ffe7e=_0x244302%0x4?_0x1ffe7e*0x40+_0x41a068:_0x41a068,_0x244302++%0x4)?_0x3f8720+=String['fromCharCode'](0xff&_0x1ffe7e>>(-0x2*_0x244302&0x6)):0x0){_0x41a068=_0x45894f['indexOf'](_0x41a068);}for(let _0x4e7bfb=0x0,_0x526064=_0x3f8720['length'];_0x4e7bfb<_0x526064;_0x4e7bfb++){_0x26d93d+='%'+('00'+_0x3f8720['charCodeAt'](_0x4e7bfb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x26d93d);};_0x50d8['vNTGtH']=_0x119f37,_0x50d8['gVRSiF']={},_0x50d8['ggmuNn']=!![];}const _0x52991f=_0x23ed44[0x0],_0x590198=_0x318b5c+_0x52991f,_0x12e1fe=_0x50d8['gVRSiF'][_0x590198];return!_0x12e1fe?(_0x50d882=_0x50d8['vNTGtH'](_0x50d882),_0x50d8['gVRSiF'][_0x590198]=_0x50d882):_0x50d882=_0x12e1fe,_0x50d882;}__name(blobRelPathFor,'blobRelPathFor');function blobsRootFor(_0x39bf06){return _0x39bf06+'/'+BLOBS_DIR;}__name(blobsRootFor,_0x26a9f7(0x158));var FS_UNSAFE_NAME_RE=/[\\/:*?"<>|\x00-\x1f]/;function validateFsSafeName(_0x2f31e4,_0x3ff0d){const _0x4f2eeb={_0x198a0e:0x1af,_0x18abc2:0x1c7,_0x4ecaa6:0x16b,_0x17c8d1:0x171},_0x2d52c0=_0x26a9f7;if(typeof _0x2f31e4!==_0x2d52c0(0x1cd))return _0x2d52c0(0x174);const _0x59eeee=_0x2f31e4[_0x2d52c0(_0x4f2eeb._0x198a0e)]();if(_0x59eeee[_0x2d52c0(0x1a5)]===0x0)return _0x2d52c0(0x151);if(_0x59eeee==='.'||_0x59eeee==='..')return'must\x20not\x20be\x20\x22.\x22\x20or\x20\x22..\x22';if(_0x59eeee[_0x2d52c0(0x16b)]('.'))return _0x2d52c0(_0x4f2eeb._0x18abc2);if(_0x3ff0d?.[_0x2d52c0(0x1a4)]&&_0x59eeee[_0x2d52c0(_0x4f2eeb._0x4ecaa6)]('_'))return _0x2d52c0(_0x4f2eeb._0x17c8d1);if(FS_UNSAFE_NAME_RE[_0x2d52c0(0x18e)](_0x59eeee))return _0x2d52c0(0x14b);return null;}__name(validateFsSafeName,_0x26a9f7(0x15d));var COLLECTION_NAME_FORBIDDEN_RE=FS_UNSAFE_NAME_RE;function _0x23ed(){const _0x569548=['C2HHCMrqyxrOrM9YuNvUswq','Dw5VDgvZDc8UC2vJCMv0CW','igLZig5VDcbHigTUB3DUihj1BM5LCIbZzxr0Aw5NiokaLcbJAg9VC2uGB25LigzYB20GDgHLihj1BM5LCI1JB25MAwCGBgLZDc4','CgfYC2vfBNzdB250zw50','zMXVB3i','C3rKB3v0lMXVzW','ChjVAMvJDfj1BNnsB290','rK9sq0vFq09mt1i','Dg9tDhjPBMC','lY5Kzwj1z2DLCG','CgXHBKfKzfzHCMLHyMXL','CMvNzxG','vu5pvevtvf9mt0DFtevwruW','BxvZDcbUB3qGC3rHCNqGD2L0AcaNlIC','Dg9mB3DLCKnHC2u','zgvIDwDeAxjgB3i','C3bSAxrmAw5LCW','z2v0uMfUzg9TvMfSDwvZ','vu5pvevtvf9erujvr19quKvwsuvxx0jzvevt','C3rYAw5N','zw52tgf5zxjgAwXLC0zVCG','ywn0AxzLrw52tMfTzq','lNnUyxbZAg90CW','x2jSB2jZ','ntm0mdCYvxH4wMPX','mtmYmdnpsev2vu4','uNvUBMvYqwrHChrLCK5VDezVDw5KrxjYB3i','iYaTls0G','C291CMnLCY5QC29U','Dw5VDgvZDa','C2vJCMv0C0zPBgvgB3i','zw5KC1DPDgG','zMLSDgvY','Dw5VDgvZDc8Uzw52','mtGYnJG5rhHqwLLc','igfSCMvHzhKGzxHPC3rZigLUia','vu5pvevtvf9dt05tt0Xf','ic0Tlq','zMXHz3m','lMPZB24','tK9Fq09mt1i','vu5pvevtvf9erujvr19esvi','zw52s2v5CW','yxbWlxnLCNzLCJPLCNjVCG','ztjL','AxnszwDLEeXPDgvYywW','vu5pvevtvf9erujvr19nqvHFqLLurvm','zhvWBgLJyxrL','zMfPBgLUz1nPBMnL','igLZigfSC28GC2v0igLUihvUB3rLC3qVlMvUDIdIGjqGDgHLihnLy3jLDcb2ywX1zsbUB3CGC2HHzg93CYbPDc4','vu5pvevtvf9dqunirv9esvi','y2f0zwDVCML6zvzHCMLHyMXL','CgfYC2vty2vUyxjPB0fUBM90yxrPB25Z','iI4G','AM9PBKXPBMvZ','CNvU','BxvZDcbUB3qGy29UDgfPBIbCic8GoIaQid8GiIa8id4GFcbVCIbJB250CM9SignOyxjHy3rLCNm','vw5ZDxbWB3j0zwrsDw5lAw5KrxjYB3i','BwfRzvj1BKLK','uNvUBMvY','mtHsCu1TtNa','BMfTzq','BxvZDcbUB3qGyMuGzw1WDhK','BwfUAwzLC3qUANnVBG','A2LUza','BM93','C2vJCMv0C0XHEwvYrMLSzxngB3i','mJeYntq2ng5ltLbetG','C3bSAwnL','yMXVyNnsB290rM9Y','Aw52ywXPzc1Uyw1L','mtvNtK5VDuu','C3rHCNrLzef0','C3bSAxq','DMfSAwrHDgvgC1nHzMvoyw1L','zgvIDwDNzxjgAwXLrM9Y','DMfSAwrHDgvtzwDTzw50tMfTzq','mJC0Cw9dA2zc','AxnbC3nPz25Tzw50t2y','ChvZAa','lNzPzxDLCI5SB2nR','zMfPBfn0CMvHAW','y29TCgXLDgvK','yMXVyLjLBfnLz21LBNrZrM9Y','yxbWlxnLCNzLCJPYzxvZzwq','lMPZB25S','CgLJA2vYlxnUyxbZAg90lNr4Da','AxnbBM5VDgf0Aw9UtgLUzq','C3rHCNrZv2L0Aa','ntq0oteYru14Evn1','refuqujbu0vFvvjm','CgfYC2vbChbtzxj2zxjfDMvUDa','yxnZAwDUBwvUDevUDhjPzxm','x2rHEs5QC29UBa','BxvZDcbUB3qGC3rHCNqGD2L0AcaNxYCGkhjLC2vYDMvKkq','uNvUBMvYtM90q29UzMLNDxjLzevYCM9Y','vu5pvevtvf9iruferuq','BxvZDcbIzsbHihn0CMLUzW','vvrd','C3rLChmUANnVBMW','C2vJCMv0C0nVBNrLBNq','lNj1BNm','vw5WBgfJzwfIBgvsDw5jzevYCM9Y','Aw5Zzxj0rw52vMfY','AgfZ','AgvHCNrIzwf0','nJq1mtG4rK9ouxvz','Aw50zxjYDxb0zwq','vu5pvevtvf9usu1fwK9orq','zw52','zMfPBgvK','C3rHDhvZ','CNvUBMvY','ywjVCNrLza','x2HLBhbLCNm','y2fUBM90igXVywqGCNvUBMvYigfKyxb0zxiGiG','CgfKu3rHCNq','vu5pvevtvf9cuK9xu0vs','CNvUswrtDgfYDgvKqxq','z2v0vvrdrgf0zq','ChjVAMvJDfj1BKrPCKzVCG','sw52ywXPzejSB2jiyxnOrxjYB3i','C2vYAwfSAxPLrw52vMfSDwu','DgvZDa','AxnsDw5UzxjdB25MAwDlzxK','zgvMAw5LuhjVCgvYDhK','C3rKzxjYlMXVzW','zMLUzeLUzgv4','vu5pvevtvf9erujvr19ive1mx01bwf9cwvrfuW','C2HHCMreyxLZrgvZy2vUzgLUzW','ywrK','zw52q29UDgvUDa','C2vJCMv0','nJu1ntCYmfDNtKLxrW','yMXVyLbHDgHgB3i','qxbW','AxnbC3nPz25Tzw50tgLUzq','Aw5KzxHpzG','C2fUAxrPEMvsDw5jzfnLz21LBNq','Axntzwn0Aw9UrgL2AwrLCG','AxnfEhrLCM5HBfzHCK5HBwu','DgvYBwLUywW','DgvZDerPCKzVCG','vu5pvevtvf9erujvr19lruvqx0nbteXt','vu5pvevtvf9eruzbvuXux05bvKLhqvrjt05FveLnru9vvf9nuW','CMvZzxj2zwrvBMrLCNnJB3jL','BgvUz3rO','C291CMnL','zgvSzxrLu2HHzg93v2fYBMLUzW','CNvUBMvYici','CMvTB3zLrw52vMfY','zw52rMLSzuzVCG','x2nVBgXLy3rPB25Z','CMvNzxHmAxrLCMfS','CNvUswqGy2fYCMLLCYbUBYb0Aw1LC3rHBxaSignHBM5VDcbWBgfJzsbPDcbPBIbHihnOyxjKoIa','C2vJCMv0CW','DhjPBq','C2XPy2u','C2nLBMfYAw9szwzgCM9TrMLSzu5HBwu','igLZigfSC28GC2v0igLUihLVDxiGC2HLBgWGzw52AxjVBM1LBNqG4OcuigL0ihDPBgWGA2vLCcbYzxnVBhzPBMCGzNjVBsb0AgvYzsaODgHLigvUDMLYB25Tzw50ihDPBNmGB3zLCIb0AguGzMLSzsKU','y3j5ChrV','Bwf0y2G','CMvXDwLYzvj1BKrPCKzVCG','AM9PBG','vu5pvevtvf9mt0nbteu','z2v0vvrdrNvSBfLLyxi','CMvWBgfJzq'];_0x23ed=function(){return _0x569548;};return _0x23ed();}function validateCollectionName(_0x4c3c69){return validateFsSafeName(_0x4c3c69);}__name(validateCollectionName,'validateCollectionName');var RUN_MANIFEST_FILE=_0x26a9f7(0x152),RUN_SOURCES_FILE=_0x26a9f7(0x1d6),UnsupportedRunKindError=class extends Error{static{__name(this,'UnsupportedRunKindError');}constructor(_0x485c55,_0x4ec1a1){const _0x372872={_0x997269:0x1a8,_0x25987d:0x14c},_0x480ddc=_0x26a9f7;super(_0x480ddc(_0x372872._0x997269)+_0x4ec1a1+'\x22\x20does\x20not\x20support\x20run\x20kind\x20\x22'+_0x485c55+'\x22'),this[_0x480ddc(0x150)]=_0x480ddc(_0x372872._0x25987d);}},RunnerAdapterNotFoundError=class extends Error{static{__name(this,_0x26a9f7(0x1d4));}constructor(_0x4b03b7,_0x5c57ac){const _0x39cd4c=_0x26a9f7;super(_0x39cd4c(0x186)+_0x4b03b7+_0x39cd4c(0x148)+_0x5c57ac),this[_0x39cd4c(0x150)]=_0x39cd4c(0x1d4);}},RunnerNotConfiguredError=class extends Error{static{__name(this,_0x26a9f7(0x172));}constructor(_0x11bd0e){const _0x201f79=_0x26a9f7;super(_0x11bd0e),this['name']=_0x201f79(0x172);}},EXPECT_FAIL_ANNOTATION='expect-fail',ANNOTATION_RE=/^\s*\/\/\s*@([a-z0-9-]+)\s*$/;function isAnnotationLine(_0x3397f4){const _0x4836fe={_0x59a3cc:0x18e},_0x53d72a=_0x26a9f7;return ANNOTATION_RE[_0x53d72a(_0x4836fe._0x59a3cc)](_0x3397f4);}__name(isAnnotationLine,_0x26a9f7(0x16a));function parseScenarioAnnotations(_0x21c8ba){const _0x1c33ae={_0x20a4af:0x15c,_0x245581:0x16b,_0x49d193:0x1b4,_0x36d34d:0x17b},_0x547657=_0x26a9f7,_0x1cd0a1=new Set();for(const _0x209c2c of _0x21c8ba[_0x547657(_0x1c33ae._0x20a4af)](/\r?\n/)){const _0x2e4644=_0x209c2c['trim']();if(_0x2e4644==='')continue;if(!_0x2e4644[_0x547657(_0x1c33ae._0x245581)]('//'))break;const _0x42bb92=_0x2e4644[_0x547657(_0x1c33ae._0x49d193)](ANNOTATION_RE);if(_0x42bb92)_0x1cd0a1[_0x547657(0x195)](_0x42bb92[0x1]);}return{'expectFail':_0x1cd0a1[_0x547657(_0x1c33ae._0x36d34d)](EXPECT_FAIL_ANNOTATION)};}__name(parseScenarioAnnotations,_0x26a9f7(0x147));var SEGMENT_NAME_FORBIDDEN_RE=FS_UNSAFE_NAME_RE;function validateSegmentName(_0x57aac2){return validateFsSafeName(_0x57aac2,{'reservedUnderscore':!![]});}__name(validateSegmentName,_0x26a9f7(0x15f));var TERMINAL_WS_EVENT=_0x26a9f7(0x1a0),RUNNER_CONFIG_KEYS=new Set([_0x26a9f7(0x188),_0x26a9f7(0x173),'UNOTEST_SLOW_MO','UNOTEST_DEFAULT_TIMEOUT_MS',_0x26a9f7(0x1a3),'UNOTEST_POPUP_GRACE_MS',_0x26a9f7(0x1b7),_0x26a9f7(0x17f),_0x26a9f7(0x1c6),'UNOTEST_DEBUG',_0x26a9f7(0x13c),_0x26a9f7(0x141),_0x26a9f7(0x1cc),_0x26a9f7(0x193),_0x26a9f7(0x1a2),'UNOTEST_NETWORK',_0x26a9f7(0x1de),_0x26a9f7(0x145),_0x26a9f7(0x13b),_0x26a9f7(0x1c1),_0x26a9f7(0x16d)]);function isRunnerConfigKey(_0x67da98){const _0x46cde5=_0x26a9f7;return RUNNER_CONFIG_KEYS[_0x46cde5(0x17b)](_0x67da98);}__name(isRunnerConfigKey,_0x26a9f7(0x18f));function categorizeVariable(_0x5a1eef){const _0x5bef92={_0x5bbcd8:0x150},_0xf56827=_0x26a9f7;if(_0x5a1eef['source']===_0xf56827(0x1ae))return _0xf56827(0x197);return isRunnerConfigKey(_0x5a1eef[_0xf56827(_0x5bef92._0x5bbcd8)])?_0xf56827(0x183):'app';}__name(categorizeVariable,_0x26a9f7(0x146));function isExternalVarName(_0x2cdd6e){const _0x9f76ef=_0x26a9f7;return/^[A-Z][A-Z0-9_]*$/[_0x9f76ef(0x18e)](_0x2cdd6e);}__name(isExternalVarName,_0x26a9f7(0x19f));var ENV_KEY_RE=/^[A-Za-z_][A-Za-z0-9_]*$/;function*assignmentEntries(_0x25491b){const _0x5bdc3c={_0x535dd9:0x16b,_0x2403eb:0x19c,_0x51b968:0x1af,_0x4d0bef:0x18e},_0x4ff4c5=_0x26a9f7;for(const _0x1a7585 of _0x25491b[_0x4ff4c5(0x15c)](/\r?\n/)){const _0xcf7188=_0x1a7585[_0x4ff4c5(0x1af)]();if(_0xcf7188===''||_0xcf7188[_0x4ff4c5(_0x5bdc3c._0x535dd9)]('#'))continue;const _0x453572=_0xcf7188[_0x4ff4c5(_0x5bdc3c._0x2403eb)]('=');if(_0x453572<=0x0)continue;const _0x24fc88=_0xcf7188[_0x4ff4c5(0x1b0)](0x0,_0x453572)[_0x4ff4c5(_0x5bdc3c._0x51b968)]();if(!ENV_KEY_RE[_0x4ff4c5(_0x5bdc3c._0x4d0bef)](_0x24fc88))continue;yield[_0x24fc88,_0xcf7188[_0x4ff4c5(0x1b0)](_0x453572+0x1)[_0x4ff4c5(_0x5bdc3c._0x51b968)]()];}}__name(assignmentEntries,_0x26a9f7(0x16f));function parseEnvContent(_0x38733f){const _0xce1201=_0x26a9f7,_0x3a0a8c={};for(const [_0x57ba37,_0xfe3faf]of assignmentEntries(_0x38733f)){let _0x2f6b46=_0xfe3faf;if(_0x2f6b46[_0xce1201(0x1a5)]>=0x2){const _0x5723b0=_0x2f6b46[0x0],_0x109264=_0x2f6b46[_0x2f6b46[_0xce1201(0x1a5)]-0x1];(_0x5723b0==='\x22'||_0x5723b0==='\x27')&&_0x5723b0===_0x109264&&(_0x2f6b46=_0x2f6b46['slice'](0x1,-0x1));}_0x3a0a8c[_0x57ba37]=_0x2f6b46;}return _0x3a0a8c;}__name(parseEnvContent,_0x26a9f7(0x1bd));function serializeEnvValue(_0xbc7854){const _0x2cb5d9={_0x3c1c9f:0x1b9},_0x13b47d=_0x26a9f7;if(_0xbc7854==='')return'';if(/[\s#"'=\\]|^[`]/[_0x13b47d(0x18e)](_0xbc7854)||/[\n\r]/['test'](_0xbc7854)){const _0x365f3e=_0xbc7854[_0x13b47d(_0x2cb5d9._0x3c1c9f)](/\\/g,'\x5c\x5c')['replace'](/"/g,'\x5c\x22')[_0x13b47d(_0x2cb5d9._0x3c1c9f)](/\n/g,'\x5cn')[_0x13b47d(0x1b9)](/\r/g,'\x5cr');return'\x22'+_0x365f3e+'\x22';}return _0xbc7854;}__name(serializeEnvValue,_0x26a9f7(0x18d));function envKeys(_0xa8069e){const _0x3ebdeb={_0x5db504:0x195},_0x5a2653=_0x26a9f7,_0x5c0a25=new Set();for(const [_0x203015]of assignmentEntries(_0xa8069e))_0x5c0a25[_0x5a2653(_0x3ebdeb._0x5db504)](_0x203015);return _0x5c0a25;}__name(envKeys,_0x26a9f7(0x13d));function isSectionDivider(_0x52939a){const _0x530cfc={_0x580518:0x16b},_0xe22c71=_0x26a9f7,_0x1fd9d6=_0x52939a['trim']();return _0x1fd9d6[_0xe22c71(_0x530cfc._0x580518)]('#')&&/---/[_0xe22c71(0x18e)](_0x1fd9d6);}__name(isSectionDivider,_0x26a9f7(0x19e));function isAssignmentLine(_0x53530d){const _0x223c40={_0x1abe30:0x1af,_0x50fd37:0x18e},_0x2e6374=_0x26a9f7,_0x3d5ebc=_0x53530d[_0x2e6374(_0x223c40._0x1abe30)]();if(_0x3d5ebc===''||_0x3d5ebc[_0x2e6374(0x16b)]('#'))return![];const _0x464265=_0x3d5ebc['indexOf']('=');return _0x464265>0x0&&ENV_KEY_RE[_0x2e6374(_0x223c40._0x50fd37)](_0x3d5ebc['slice'](0x0,_0x464265)[_0x2e6374(0x1af)]());}__name(isAssignmentLine,_0x26a9f7(0x19b));function isAssignmentOf(_0x48f48f,_0x2b59bb){const _0x52f22c=_0x26a9f7,_0x5cbd58=_0x48f48f[_0x52f22c(0x1af)]();if(_0x5cbd58===''||_0x5cbd58['startsWith']('#'))return![];const _0x3efa21=_0x5cbd58['indexOf']('=');if(_0x3efa21<=0x0)return![];return _0x5cbd58[_0x52f22c(0x1b0)](0x0,_0x3efa21)[_0x52f22c(0x1af)]()===_0x2b59bb;}__name(isAssignmentOf,_0x26a9f7(0x161));function splitLines(_0x58984f){const _0x527807={_0x3016c1:0x15c},_0x1f7c3f=_0x26a9f7,_0x33bb61=_0x58984f['endsWith']('\x0a'),_0x437983=_0x33bb61?_0x58984f[_0x1f7c3f(0x1b0)](0x0,-0x1):_0x58984f;return{'lines':_0x437983===''?[]:_0x437983[_0x1f7c3f(_0x527807._0x3016c1)]('\x0a'),'trailingNewline':_0x33bb61};}__name(splitLines,_0x26a9f7(0x1ca));function joinLines(_0x58d731,_0x44fa16){const _0x2e8af2=_0x58d731['join']('\x0a');return _0x44fa16||_0x2e8af2===''?_0x2e8af2+'\x0a':_0x2e8af2;}__name(joinLines,_0x26a9f7(0x149));function insertEnvVar(_0x565aa8,_0x286dde,_0x2afe6a,_0x3ca0ac){const _0x5bd8f1={_0x43aacb:0x1c8,_0x41357d:0x1a5,_0x1209bb:0x162,_0x297f4f:0x1d5},_0x27c644=_0x26a9f7,_0x39b334=_0x286dde+'='+serializeEnvValue(_0x2afe6a),{lines:_0xcca0b2,trailingNewline:_0x5f083e}=splitLines(_0x565aa8);if(_0x3ca0ac){const _0x2ca779=new RegExp('\x5cb'+_0x3ca0ac[_0x27c644(_0x5bd8f1._0x43aacb)]()+'\x5cb'),_0x538941=_0xcca0b2[_0x27c644(0x192)](_0x4d5adf=>isSectionDivider(_0x4d5adf)&&_0x2ca779[_0x27c644(0x18e)](_0x4d5adf[_0x27c644(0x1c8)]()));if(_0x538941!==-0x1){let _0x2bb90a=_0xcca0b2[_0x27c644(0x1a5)];for(let _0xb6d080=_0x538941+0x1;_0xb6d080<_0xcca0b2[_0x27c644(_0x5bd8f1._0x41357d)];_0xb6d080++){if(isSectionDivider(_0xcca0b2[_0xb6d080])){_0x2bb90a=_0xb6d080;break;}}let _0x26420a=-0x1,_0x440abf=-0x1;for(let _0x5141eb=_0x538941+0x1;_0x5141eb<_0x2bb90a;_0x5141eb++){if(_0xcca0b2[_0x5141eb]['trim']()!=='')_0x440abf=_0x5141eb;if(isAssignmentLine(_0xcca0b2[_0x5141eb]))_0x26420a=_0x5141eb;}const _0x3ecafc=_0x26420a>=0x0?_0x26420a:_0x440abf,_0x5d3894=_0x3ecafc>=0x0?_0x3ecafc+0x1:_0x538941+0x1;return _0xcca0b2[_0x27c644(0x157)](_0x5d3894,0x0,_0x39b334),joinLines(_0xcca0b2,_0x5f083e||_0xcca0b2['length']>0x0);}if(_0xcca0b2['length']>0x0)_0xcca0b2[_0x27c644(_0x5bd8f1._0x1209bb)]('');return _0xcca0b2['push'](_0x27c644(_0x5bd8f1._0x297f4f)+_0x3ca0ac+_0x27c644(0x138),_0x39b334),joinLines(_0xcca0b2,!![]);}return _0xcca0b2['push'](_0x39b334),joinLines(_0xcca0b2,!![]);}__name(insertEnvVar,_0x26a9f7(0x17a));function removeEnvVar(_0x5668ae,_0x31ccf5){const _0x43465a={_0x21c800:0x1da,_0x2dadce:0x1a5},_0x117c1e=_0x26a9f7,{lines:_0x4b68c4,trailingNewline:_0x3eda9b}=splitLines(_0x5668ae),_0x5670f7=_0x4b68c4[_0x117c1e(_0x43465a._0x21c800)](_0x3b1c35=>!isAssignmentOf(_0x3b1c35,_0x31ccf5)),_0x353c8e=_0x5670f7[_0x117c1e(_0x43465a._0x2dadce)]!==_0x4b68c4[_0x117c1e(_0x43465a._0x2dadce)];return{'content':joinLines(_0x5670f7,_0x3eda9b),'removed':_0x353c8e};}__name(removeEnvVar,_0x26a9f7(0x1a9));var SECTION_BY_KIND={'app':_0x26a9f7(0x19a),'runner':_0x26a9f7(0x14e),'secret':void 0x0};function planAddVariable(_0x2f8ee2){const _0x4c8abc={_0x23639b:0x183,_0x13e309:0x1bc,_0x5dcd7c:0x17b,_0x5643c0:0x177,_0x18e1d7:0x197,_0x388573:0x1ae,_0x1eb9ea:0x1db,_0x49ab77:0x142,_0x9cacc7:0x1dd},_0x34baa4=_0x26a9f7,{name:_0x563992,kind:_0x2ac0f2}=_0x2f8ee2;if(_0x2ac0f2===_0x34baa4(_0x4c8abc._0x23639b)){if(!isRunnerConfigKey(_0x563992))return{'ok':![],'code':'unknown-runner-key','message':_0x563992+_0x34baa4(_0x4c8abc._0x13e309)};}else{if(!isExternalVarName(_0x563992))return{'ok':![],'code':_0x34baa4(0x159),'message':_0x563992+'\x20must\x20be\x20UPPER_SNAKE\x20(e.g.\x20APP_BASE_URL)\x20so\x20a\x20scenario\x20can\x20reference\x20it\x20by\x20name.'};}const _0x13f19e=envKeys(_0x2f8ee2[_0x34baa4(0x196)])[_0x34baa4(_0x4c8abc._0x5dcd7c)](_0x563992),_0x177d13=envKeys(_0x2f8ee2[_0x34baa4(_0x4c8abc._0x5643c0)])['has'](_0x563992),_0x5c42d8=_0x2ac0f2===_0x34baa4(_0x4c8abc._0x18e1d7)?'secrets':_0x34baa4(0x180),_0x204622=_0x5c42d8==='secrets'?_0x177d13:_0x13f19e,_0x25a6e4=_0x5c42d8===_0x34baa4(_0x4c8abc._0x388573)?_0x34baa4(0x1bb):_0x34baa4(_0x4c8abc._0x1eb9ea);if(_0x204622)return{'ok':![],'code':_0x34baa4(_0x4c8abc._0x49ab77),'message':_0x563992+_0x34baa4(_0x4c8abc._0x9cacc7)+_0x25a6e4+'\x20—\x20pick\x20a\x20different\x20name\x20or\x20edit\x20the\x20existing\x20value.'};const _0x277ebf=[];return _0x2ac0f2===_0x34baa4(_0x4c8abc._0x18e1d7)&&_0x13f19e&&_0x277ebf[_0x34baa4(0x162)](_0x563992+_0x34baa4(0x144)),_0x2ac0f2!==_0x34baa4(_0x4c8abc._0x18e1d7)&&_0x177d13&&_0x277ebf[_0x34baa4(0x162)](_0x563992+'\x20is\x20also\x20set\x20in\x20unotest/.secrets\x20—\x20the\x20secret\x20value\x20shadows\x20this\x20one.'),{'ok':!![],'target':_0x5c42d8,'sectionLabel':SECTION_BY_KIND[_0x2ac0f2],'warnings':_0x277ebf};}__name(planAddVariable,_0x26a9f7(0x1c4));function deleteShadowWarning(_0x220b5a,_0x2874e0,_0x5ef179){const _0x2acd28={_0x1b728e:0x1b2},_0x28916f=_0x26a9f7;if(_0x5ef179!==void 0x0&&_0x5ef179!==_0x2874e0)return[_0x220b5a+_0x28916f(_0x2acd28._0x1b728e)];return[];}__name(deleteShadowWarning,_0x26a9f7(0x1a7));var TERMINAL_RUNTIME_STATES=[_0x26a9f7(0x165),_0x26a9f7(0x181),_0x26a9f7(0x184)];function isTerminalRuntimeState(_0x35ba46){return TERMINAL_RUNTIME_STATES['includes'](_0x35ba46);}__name(isTerminalRuntimeState,'isTerminalRuntimeState');export{BLOBS_DIR,COLLECTIONS_SUBDIR,COLLECTION_NAME_FORBIDDEN_RE,COMMANDS_FILE,DAY_INDEX_FILE,E2E_SUBDIR,ENV_FILE,EXPECT_FAIL_ANNOTATION,HEARTBEAT_FILE,HELPERS_SUBDIR,InvalidBlobHashError,LOCK_FILE,LOG_FILE,PICKER_SNAPSHOT_FILE,RUNNER_CONFIG_KEYS,RUNS_SUBDIR,RUNTIME_FILE,RUN_INDEX_SCHEMA_VERSION,RUN_MANIFEST_FILE,RUN_SOURCES_FILE,RunnerAdapterNotFoundError,RunnerNotConfiguredError,SCENARIOS_INDEX_DIR,SCENARIOS_LATEST_FILE,SCENARIO_RECENT_WINDOW,SECRETS_FILE,SEGMENT_NAME_FORBIDDEN_RE,SNAPSHOTS_SUBDIR,STDERR_FILE,STDOUT_FILE,STEPS_FILE,TERMINAL_RUNTIME_STATES,TERMINAL_WS_EVENT,UNOTEST_DIR,UnplaceableRunIdError,UnsupportedRunKindError,activeEnvName,blobPathFor,blobRelPathFor,blobRelSegmentsFor,blobsRootFor,categorizeVariable,debugDirFor,debuggerFileFor,deleteShadowWarning,envFileFor,envKeys,envLayerFilesFor,foldScenarioRun,insertEnvVar,isAnnotationLine,isExternalVarName,isFailingStatus,isRegexLiteral,isRunnerConfigKey,isTerminalRuntimeState,makeRunId,parseAppServerEvent,parseEnvContent,parseScenarioAnnotations,planAddVariable,projectRunDirFor,projectRunsRoot,regexLiteral,removeEnvVar,requireRunDirFor,runDirFor,runIdStartedAt,runsDirFor,sanitizeRunIdSegment,scenarioIndexFileName,scenarioRefFromFileName,secretsFileFor,secretsLayerFilesFor,serializeEnvValue,shardDaysDescending,shardDirFor,shardPathForRunId,shardPathForTimestamp,testDirFor,validateCollectionName,validateSegmentName};
1
+ const _0x353dfc=_0x57ef;(function(_0x4e5ba2,_0x2936ab){const _0x170200={_0xe4877c:0x124,_0x49758a:0xe2,_0x45d9be:0xcc,_0x57f40f:0x150},_0x12be77=_0x57ef,_0x5e7be3=_0x4e5ba2();while(!![]){try{const _0x1de77f=parseInt(_0x12be77(0x10a))/0x1*(parseInt(_0x12be77(0xdb))/0x2)+-parseInt(_0x12be77(0xff))/0x3+parseInt(_0x12be77(0x120))/0x4*(-parseInt(_0x12be77(0x14b))/0x5)+-parseInt(_0x12be77(_0x170200._0xe4877c))/0x6*(parseInt(_0x12be77(0xdf))/0x7)+-parseInt(_0x12be77(_0x170200._0x49758a))/0x8+-parseInt(_0x12be77(_0x170200._0x45d9be))/0x9+parseInt(_0x12be77(_0x170200._0x57f40f))/0xa;if(_0x1de77f===_0x2936ab)break;else _0x5e7be3['push'](_0x5e7be3['shift']());}catch(_0x2fb264){_0x5e7be3['push'](_0x5e7be3['shift']());}}}(_0x1ae1,0x759b2));var __defProp=Object[_0x353dfc(0x118)],__name=(_0x383154,_0x4db121)=>__defProp(_0x383154,'name',{'value':_0x4db121,'configurable':!![]});function parseAppServerEvent(_0x5c97ab){const _0x435c50={_0x147146:0xdc,_0x587447:0xc3,_0x2c253e:0x122},_0x25c89b=_0x353dfc,_0x4eee5d=_0x5c97ab[_0x25c89b(0xbf)]();if(!_0x4eee5d['startsWith']('{'))return null;try{const _0x17f776=JSON['parse'](_0x4eee5d);if(_0x17f776[_0x25c89b(_0x435c50._0x147146)]===_0x25c89b(_0x435c50._0x587447)||_0x17f776['kind']===_0x25c89b(0xf5)||_0x17f776[_0x25c89b(_0x435c50._0x147146)]===_0x25c89b(_0x435c50._0x2c253e))return _0x17f776;return null;}catch{return null;}}__name(parseAppServerEvent,'parseAppServerEvent');var UNOTEST_DIR=_0x353dfc(0x106),E2E_SUBDIR=_0x353dfc(0x116),HELPERS_SUBDIR=_0x353dfc(0xee),COLLECTIONS_SUBDIR='_collections',RUNS_SUBDIR=_0x353dfc(0x107),SNAPSHOTS_SUBDIR='.snapshots';function testDirFor(_0x304eb9){return''+E2E_SUBDIR+_0x304eb9;}__name(testDirFor,_0x353dfc(0x14e));function runsDirFor(_0x4e19cc,_0x1787cc){return''+RUNS_SUBDIR+_0x4e19cc+(_0x1787cc?'.'+_0x1787cc:'');}__name(runsDirFor,_0x353dfc(0x12a));function isRunsDirName(_0x37050d){const _0x13a10b={_0x12374b:0x10f,_0x3a66f4:0x10f},_0x480d30=_0x353dfc;return _0x37050d===RUNS_SUBDIR||_0x37050d[_0x480d30(_0x13a10b._0x12374b)](RUNS_SUBDIR+'-')||_0x37050d[_0x480d30(_0x13a10b._0x3a66f4)](RUNS_SUBDIR+'.');}__name(isRunsDirName,_0x353dfc(0x13d));function debugDirFor(_0x397c66){const _0x375f0e={_0x5c1a05:0x139},_0x32b089=_0x353dfc;return _0x32b089(_0x375f0e._0x5c1a05)+_0x397c66;}__name(debugDirFor,'debugDirFor');function debuggerFileFor(_0x2a2b7a){const _0x5ef33c={_0x2f571d:0x12c},_0x36ce4d=_0x353dfc;return UNOTEST_DIR+_0x36ce4d(0x111)+_0x2a2b7a+_0x36ce4d(_0x5ef33c._0x2f571d);}__name(debuggerFileFor,_0x353dfc(0xc9));var LOCK_FILE=_0x353dfc(0x12f),LOG_FILE=_0x353dfc(0xf7),STEPS_FILE=_0x353dfc(0xed),HEARTBEAT_FILE='heartbeat',DAY_INDEX_FILE='_day.jsonl',SCENARIOS_INDEX_DIR=_0x353dfc(0x13c),SCENARIOS_LATEST_FILE=_0x353dfc(0x114),STDOUT_FILE=_0x353dfc(0xd7),STDERR_FILE='stderr.log',COMMANDS_FILE=_0x353dfc(0xd0),RUNTIME_FILE=_0x353dfc(0x127),PICKER_SNAPSHOT_FILE=_0x353dfc(0xe0),ENV_FILE=_0x353dfc(0xcf),SECRETS_FILE=_0x353dfc(0x11f);function envFileFor(_0x2d5fb3,_0x38016d){return''+ENV_FILE+_0x2d5fb3+(_0x38016d?'.'+_0x38016d:'');}__name(envFileFor,_0x353dfc(0x112));function secretsFileFor(_0x792a88,_0x36f56d){return''+SECRETS_FILE+_0x792a88+(_0x36f56d?'.'+_0x36f56d:'');}__name(secretsFileFor,_0x353dfc(0x102));function envLayerFilesFor(_0x539acb,_0x1d1823){return layersFor(ENV_FILE,_0x539acb,_0x1d1823);}__name(envLayerFilesFor,_0x353dfc(0x165));function secretsLayerFilesFor(_0x3b37bd,_0x2df820){return layersFor(SECRETS_FILE,_0x3b37bd,_0x2df820);}__name(secretsLayerFilesFor,_0x353dfc(0x140));function layersFor(_0x39afa1,_0x403573,_0x409ab6){const _0xaf9053={_0x11d27c:0xbe},_0x4efb00=_0x353dfc,_0x1148a9=[_0x39afa1];if(_0x403573)_0x1148a9[_0x4efb00(0xbe)](''+_0x39afa1+_0x403573);if(_0x409ab6){_0x1148a9['push'](_0x39afa1+'.'+_0x409ab6);if(_0x403573)_0x1148a9[_0x4efb00(_0xaf9053._0x11d27c)](''+_0x39afa1+_0x403573+'.'+_0x409ab6);}return _0x1148a9;}__name(layersFor,'layersFor');function activeEnvName(_0x31406e){const _0x29c710=_0x353dfc,_0x4a2f22=_0x31406e[_0x29c710(0xd9)]?.['trim']();return _0x4a2f22?_0x4a2f22:void 0x0;}__name(activeEnvName,_0x353dfc(0xfd));var RESERVED_ENV_NAMES=new Set([_0x353dfc(0xd8),'sample',_0x353dfc(0x109)]);function envNamesFromDirListing(_0x2c8f45,_0x158bd3){const _0x50b9eb={_0x49583b:0xe1,_0x2c99a3:0x15c,_0x13b639:0x148,_0xd7833f:0x155},_0x57a15b=_0x353dfc,_0x339dc2=[_0x57a15b(_0x50b9eb._0x49583b),_0x57a15b(0xc4)][_0x57a15b(_0x50b9eb._0x2c99a3)](_0x44face=>_0x158bd3?[_0x44face,''+_0x44face+_0x158bd3]:[_0x44face]),_0x438bbf=new Set();for(const _0x1f145a of _0x2c8f45){for(const _0x119211 of _0x339dc2){const _0x16ba13=_0x119211+'.';if(!_0x1f145a[_0x57a15b(0x10f)](_0x16ba13))continue;const _0x7c7ce7=_0x1f145a[_0x57a15b(0x135)](_0x16ba13[_0x57a15b(0x105)]);if(!_0x7c7ce7||_0x7c7ce7[_0x57a15b(_0x50b9eb._0x13b639)]('/'))continue;if(RESERVED_ENV_NAMES[_0x57a15b(0x15f)](_0x7c7ce7))continue;_0x438bbf['add'](_0x7c7ce7);}}return[..._0x438bbf][_0x57a15b(_0x50b9eb._0xd7833f)]();}__name(envNamesFromDirListing,_0x353dfc(0x10c));function isRegexLiteral(_0x574f25){const _0x261170={_0x137882:0xfa,_0x587430:0x108,_0x1d74b4:0x10e},_0xf4bfce=_0x353dfc;return typeof _0x574f25===_0xf4bfce(_0x261170._0x137882)&&_0x574f25!==null&&_0x574f25['kind']==='regex'&&typeof _0x574f25[_0xf4bfce(_0x261170._0x587430)]===_0xf4bfce(0x10e)&&typeof _0x574f25[_0xf4bfce(0x11e)]===_0xf4bfce(_0x261170._0x1d74b4);}__name(isRegexLiteral,'isRegexLiteral');function regexLiteral(_0x265cd0,_0x7f4d=''){const _0x5c6751=_0x353dfc;return{'kind':_0x5c6751(0x131),'source':_0x265cd0,'flags':_0x7f4d};}__name(regexLiteral,_0x353dfc(0x125));var RAND_BYTES=0x6;function makeRunId(_0x240218){const _0x4b0c84={_0x20bbc6:0x13a},_0x33f49b=_0x353dfc,_0x3a9557=sanitizeRunIdSegment(_0x240218),_0x18e264=Date[_0x33f49b(_0x4b0c84._0x20bbc6)]()[_0x33f49b(0xce)](0x24),_0x4dd0f3=new Uint8Array(RAND_BYTES);globalThis[_0x33f49b(0x136)]['getRandomValues'](_0x4dd0f3);let _0x1adde9='';for(let _0x190069=0x0;_0x190069<_0x4dd0f3['length'];_0x190069++){_0x1adde9+=_0x4dd0f3[_0x190069][_0x33f49b(0xce)](0x10)[_0x33f49b(0xd6)](0x2,'0');}return _0x3a9557+'-'+_0x18e264+'-'+_0x1adde9;}__name(makeRunId,_0x353dfc(0xc7));function sanitizeRunIdSegment(_0x5143d6){const _0x3d4484={_0x280374:0x105,_0x384c1f:0xe8},_0x5f3042=_0x353dfc,_0x1e8580=_0x5143d6[_0x5f3042(0x117)](/[^a-zA-Z0-9_-]+/g,'-')[_0x5f3042(0x117)](/-+/g,'-')[_0x5f3042(0x117)](/^-|-$/g,'');return _0x1e8580[_0x5f3042(_0x3d4484._0x280374)]>0x0?_0x1e8580:_0x5f3042(_0x3d4484._0x384c1f);}__name(sanitizeRunIdSegment,_0x353dfc(0xd1));var RANDOM_SUFFIX_RE=/^[0-9a-f]{6,}$/,MIN_PLAUSIBLE_MS=Date['UTC'](0x7e4,0x0,0x1),MAX_PLAUSIBLE_MS=Date['UTC'](0x834,0x0,0x1);function runIdStartedAt(_0x864ac9){const _0x195e9c={_0x320574:0x132,_0x1f3e14:0x152,_0x7b858f:0x105},_0x2f22db=_0x353dfc,_0x31fdbf=_0x864ac9[_0x2f22db(_0x195e9c._0x320574)]('-');if(_0x31fdbf[_0x2f22db(0x105)]<0x3)return null;const _0xd6943=_0x31fdbf[_0x31fdbf[_0x2f22db(0x105)]-0x1];if(!RANDOM_SUFFIX_RE[_0x2f22db(_0x195e9c._0x1f3e14)](_0xd6943))return null;const _0x6acc4d=_0x31fdbf[_0x31fdbf[_0x2f22db(_0x195e9c._0x7b858f)]-0x2];if(!/^[0-9a-z]+$/[_0x2f22db(0x152)](_0x6acc4d))return null;const _0x5313fc=parseInt(_0x6acc4d,0x24);if(!Number[_0x2f22db(0x110)](_0x5313fc))return null;if(_0x5313fc<MIN_PLAUSIBLE_MS||_0x5313fc>=MAX_PLAUSIBLE_MS)return null;return _0x5313fc;}__name(runIdStartedAt,_0x353dfc(0x11d));function shardPathForTimestamp(_0x3c0ec7){const _0x4e6d88={_0xe081b0:0xd6,_0x418647:0x14d},_0x1d7bcd=_0x353dfc,_0x54a1a8=new Date(_0x3c0ec7),_0x5ac25d=String(_0x54a1a8['getUTCFullYear']())['padStart'](0x4,'0'),_0x4e006f=String(_0x54a1a8['getUTCMonth']()+0x1)[_0x1d7bcd(_0x4e6d88._0xe081b0)](0x2,'0'),_0x340bab=String(_0x54a1a8[_0x1d7bcd(_0x4e6d88._0x418647)]())[_0x1d7bcd(0xd6)](0x2,'0');return _0x5ac25d+'/'+_0x4e006f+'/'+_0x340bab;}__name(shardPathForTimestamp,_0x353dfc(0x166));function shardPathForRunId(_0x37b24b){const _0x59fe27=runIdStartedAt(_0x37b24b);return _0x59fe27===null?null:shardPathForTimestamp(_0x59fe27);}__name(shardPathForRunId,_0x353dfc(0x153));function runDirFor(_0x1bf752,_0x43a712){const _0x42afd4=shardPathForRunId(_0x43a712);return _0x42afd4===null?null:_0x1bf752+'/'+_0x42afd4+'/'+_0x43a712;}__name(runDirFor,_0x353dfc(0xf1));var UnplaceableRunIdError=class extends Error{static{__name(this,'UnplaceableRunIdError');}constructor(_0x20831e){const _0x493b67=_0x353dfc;super(_0x493b67(0x141)+_0x20831e),this[_0x493b67(0x158)]=_0x493b67(0x15d);}};function requireRunDirFor(_0x120b21,_0x55c1c0){const _0x58148a=runDirFor(_0x120b21,_0x55c1c0);if(_0x58148a===null)throw new UnplaceableRunIdError(_0x55c1c0);return _0x58148a;}__name(requireRunDirFor,'requireRunDirFor');function projectRunsRoot(_0x233201='',_0x4d3bfa){return UNOTEST_DIR+'/'+runsDirFor(_0x233201,_0x4d3bfa);}__name(projectRunsRoot,_0x353dfc(0x113));function projectRunDirFor(_0x5f1423,_0x4db4cb='',_0xa32919){return requireRunDirFor(projectRunsRoot(_0x4db4cb,_0xa32919),_0x5f1423);}__name(projectRunDirFor,_0x353dfc(0xfc));function shardDirFor(_0x48dcaf,_0x2b1839){return _0x48dcaf+'/'+shardPathForTimestamp(_0x2b1839);}__name(shardDirFor,_0x353dfc(0x129));function*shardDaysDescending(_0x1fb2f7,_0x1f4dd3,_0x14faef){const _0x45eeb9={_0x475d4f:0x15a},_0x1df3c2=_0x353dfc,_0x155ed2=0x5265c00;let _0x2c71a6=Math[_0x1df3c2(_0x45eeb9._0x475d4f)](_0x1f4dd3/_0x155ed2)*_0x155ed2;for(let _0x33e491=0x0;_0x33e491<_0x14faef;_0x33e491++){yield shardDirFor(_0x1fb2f7,_0x2c71a6),_0x2c71a6-=_0x155ed2;}}__name(shardDaysDescending,'shardDaysDescending');var RUN_INDEX_SCHEMA_VERSION=0x2,SCENARIO_RECENT_WINDOW=0xc;function isFailingStatus(_0x1b11a8){const _0x475865={_0xef06f3:0x11c},_0x3edc60=_0x353dfc;return _0x1b11a8===_0x3edc60(0x128)||_0x1b11a8===_0x3edc60(_0x475865._0xef06f3);}__name(isFailingStatus,_0x353dfc(0xe4));function foldScenarioRun(_0x36c03c,_0x28f52c){const _0x387e13={_0x22a392:0x11b,_0x417bc7:0xdd,_0xabbb87:0xe9},_0x1603dc=_0x353dfc,_0x2b0af3={'lastRunId':_0x28f52c[_0x1603dc(0xc6)],'lastStatus':_0x28f52c[_0x1603dc(0xdd)],'lastAt':_0x28f52c[_0x1603dc(_0x387e13._0x22a392)],'lastDurationMs':_0x28f52c[_0x1603dc(0x11a)],'recent':[..._0x36c03c?.['recent']??[],_0x28f52c['status']]['slice'](-SCENARIO_RECENT_WINDOW)};if(!isFailingStatus(_0x28f52c[_0x1603dc(_0x387e13._0x417bc7)]))return{..._0x2b0af3,'failStreak':0x0,'failingSince':null};const _0x36ddbf=(_0x36c03c?.[_0x1603dc(_0x387e13._0xabbb87)]??0x0)+0x1;return{..._0x2b0af3,'failStreak':_0x36ddbf,'failingSince':_0x36ddbf===0x1?_0x28f52c[_0x1603dc(0x11b)]:_0x36c03c?.[_0x1603dc(0xf4)]??_0x28f52c[_0x1603dc(0x11b)]};}__name(foldScenarioRun,_0x353dfc(0x15b));function scenarioIndexFileName(_0x261b93){const _0x34ad15={_0x1d6532:0x164},_0x16e4de=_0x353dfc;return encodeURIComponent(_0x261b93)+_0x16e4de(_0x34ad15._0x1d6532);}__name(scenarioIndexFileName,_0x353dfc(0x13e));function scenarioRefFromFileName(_0x2e77e3){const _0x4a9b22={_0xa950c0:0xea,_0x1b7ab2:0x135,_0x5c070a:0x105},_0x464994=_0x353dfc;if(!_0x2e77e3[_0x464994(_0x4a9b22._0xa950c0)](_0x464994(0x164)))return null;try{return decodeURIComponent(_0x2e77e3[_0x464994(_0x4a9b22._0x1b7ab2)](0x0,-_0x464994(0x164)[_0x464994(_0x4a9b22._0x5c070a)]));}catch{return null;}}__name(scenarioRefFromFileName,_0x353dfc(0x14a));var BLOBS_DIR='_blobs',GENERATION_SEP='~',HASH_RE=/^[0-9a-f]{8,}$/,InvalidBlobHashError=class extends Error{static{__name(this,'InvalidBlobHashError');}constructor(_0x599a87){const _0x47935b={_0x57d01d:0x160,_0x17ad85:0xe5},_0x535098=_0x353dfc;super(_0x535098(_0x47935b._0x57d01d)+_0x599a87),this['name']=_0x535098(_0x47935b._0x17ad85);}};function blobPathFor(_0x149abc,_0x359f21,_0x4861ad,_0x270435=0x0){return _0x149abc+'/'+blobRelPathFor(_0x359f21,_0x4861ad,_0x270435);}__name(blobPathFor,_0x353dfc(0xf6));function blobRelSegmentsFor(_0x700006,_0x391b08,_0x483033=0x0){const _0x2f98cb={_0x2aaea9:0x152,_0x37d1d7:0x135},_0x2bb94e=_0x353dfc;if(!HASH_RE[_0x2bb94e(_0x2f98cb._0x2aaea9)](_0x700006))throw new InvalidBlobHashError(_0x700006);const _0x6e4841=_0x483033>0x0?''+GENERATION_SEP+_0x483033:'';return[BLOBS_DIR,_0x700006['slice'](0x0,0x2),_0x700006[_0x2bb94e(_0x2f98cb._0x37d1d7)](0x2,0x4),''+_0x700006+_0x6e4841+'.'+_0x391b08];}__name(blobRelSegmentsFor,_0x353dfc(0xe6));function blobRelPathFor(_0x5c4dc4,_0x2148d2,_0x2d2d64=0x0){const _0x1fb216=_0x353dfc;return blobRelSegmentsFor(_0x5c4dc4,_0x2148d2,_0x2d2d64)[_0x1fb216(0x145)]('/');}__name(blobRelPathFor,_0x353dfc(0x13f));function blobsRootFor(_0x38e4c1){return _0x38e4c1+'/'+BLOBS_DIR;}__name(blobsRootFor,_0x353dfc(0x143));var FS_UNSAFE_NAME_RE=/[\\/:*?"<>|\x00-\x1f]/;function validateFsSafeName(_0x42ed27,_0x2f361f){const _0x3342c0={_0x305ef7:0x10e,_0x454ac4:0xc8,_0x20bf6b:0xeb,_0x20866f:0x10f,_0x308b30:0xf8},_0x2b0b15=_0x353dfc;if(typeof _0x42ed27!==_0x2b0b15(_0x3342c0._0x305ef7))return'must\x20be\x20a\x20string';const _0x36dd19=_0x42ed27['trim']();if(_0x36dd19[_0x2b0b15(0x105)]===0x0)return'must\x20not\x20be\x20empty';if(_0x36dd19==='.'||_0x36dd19==='..')return _0x2b0b15(_0x3342c0._0x454ac4);if(_0x36dd19[_0x2b0b15(0x10f)]('.'))return'must\x20not\x20start\x20with\x20\x27.\x27';if(_0x2f361f?.[_0x2b0b15(_0x3342c0._0x20bf6b)]&&_0x36dd19[_0x2b0b15(_0x3342c0._0x20866f)]('_'))return _0x2b0b15(_0x3342c0._0x308b30);if(FS_UNSAFE_NAME_RE['test'](_0x36dd19))return'must\x20not\x20contain\x20\x5c\x20/\x20:\x20*\x20?\x20\x22\x20<\x20>\x20|\x20or\x20control\x20characters';return null;}__name(validateFsSafeName,_0x353dfc(0x142));var COLLECTION_NAME_FORBIDDEN_RE=FS_UNSAFE_NAME_RE;function validateCollectionName(_0x5ac90e){return validateFsSafeName(_0x5ac90e);}__name(validateCollectionName,_0x353dfc(0xf3));var RUN_MANIFEST_FILE=_0x353dfc(0xe7),RUN_SOURCES_FILE=_0x353dfc(0x13b),UnsupportedRunKindError=class extends Error{static{__name(this,_0x353dfc(0x134));}constructor(_0x1a9315,_0x1b6b79){const _0x52c6cc=_0x353dfc;super('runner\x20\x22'+_0x1b6b79+_0x52c6cc(0x15e)+_0x1a9315+'\x22'),this[_0x52c6cc(0x158)]=_0x52c6cc(0x134);}},RunnerAdapterNotFoundError=class extends Error{static{__name(this,_0x353dfc(0x146));}constructor(_0x3e75bb,_0x4f2bc1){const _0x30e18b={_0x104e6b:0x146},_0x45745f=_0x353dfc;super('cannot\x20load\x20runner\x20adapter\x20\x22'+_0x3e75bb+'\x22.\x20'+_0x4f2bc1),this[_0x45745f(0x158)]=_0x45745f(_0x30e18b._0x104e6b);}},RunnerNotConfiguredError=class extends Error{static{__name(this,_0x353dfc(0x12d));}constructor(_0x5a001f){const _0x593805=_0x353dfc;super(_0x5a001f),this[_0x593805(0x158)]='RunnerNotConfiguredError';}},EXPECT_FAIL_ANNOTATION='expect-fail',ANNOTATION_RE=/^\s*\/\/\s*@([a-z0-9-]+)\s*$/;function isAnnotationLine(_0x3ec1c9){const _0x35a45f={_0x37d161:0x152},_0x13ced7=_0x353dfc;return ANNOTATION_RE[_0x13ced7(_0x35a45f._0x37d161)](_0x3ec1c9);}function _0x1ae1(){const _0x17fb37=['CgXHBKfKzfzHCMLHyMXL','ywrK','CNvUrgLYrM9Y','zhvWBgLJyxrL','DMfSAwrHDgvdB2XSzwn0Aw9UtMfTzq','zMfPBgLUz1nPBMnL','yxbWlxnLCNzLCJPYzxvZzwq','yMXVyLbHDgHgB3i','lNzPzxDLCI5SB2C','BxvZDcbUB3qGC3rHCNqGD2L0AcaNxYCGkhjLC2vYDMvKkq','AM9PBKXPBMvZ','B2jQzwn0','igLZigfSC28GC2v0igLUihvUB3rLC3qVlMvUDIdIGjqGDgHLihnLy3jLDcb2ywX1zsbUB3CGC2HHzg93CYbPDc4','ChjVAMvJDfj1BKrPCKzVCG','ywn0AxzLrw52tMfTzq','vu5pvevtvf9eruzbvuXux05bvKLhqvrjt05FveLnru9vvf9nuW','oti1otu5CMr1zKrl','rK9sq0vFq09mt1i','C2vJCMv0CW','C2vJCMv0C0zPBgvgB3i','vu5pvevtvf9orvrxt1jl','AxnfEhrLCM5HBfzHCK5HBwu','BgvUz3rO','Dw5VDgvZDa','lNj1BNm','C291CMnL','DgvTCgXHDgu','mK9hzeH3vW','CMvTB3zLrw52vMfY','zw52tMfTzxngCM9TrgLYtgLZDgLUzW','Aw52ywXPzc1Uyw1L','C3rYAw5N','C3rHCNrZv2L0Aa','AxngAw5PDgu','lY5Kzwj1z2DLCG','zw52rMLSzuzVCG','ChjVAMvJDfj1BNnsB290','x2XHDgvZDc5QC29U','vu5pvevtvf9eruzbvuXux1rjtuvpvvrFtvm','ztjL','CMvWBgfJzq','zgvMAw5LuhjVCgvYDhK','vu5pvevtvf9erujvr19esvi','zhvYyxrPB25nCW','C3rHCNrLzef0','Aw50zxjYDxb0zwq','CNvUswrtDgfYDgvKqxq','zMXHz3m','Dw5VDgvZDc8UC2vJCMv0CW','mtaXnZjmvwnNrwq','uNvUBMvY','yxbWlxnLCNzLCJPLCNjVCG','qxbW','nLvkr1nYtq','CMvNzxHmAxrLCMfS','vu5pvevtvf9erujvr19nqvHFqLLurvm','CNvUDgLTzs5QC29U','zMfPBgvK','C2HHCMreAxjgB3i','CNvUC0rPCKzVCG','iokaLcbWAwnRigeGzgLMzMvYzw50ig5HBwuGB3iGzwrPDcb0AguGzxHPC3rPBMCGDMfSDwuU','lMPZB24','uNvUBMvYtM90q29UzMLNDxjLzevYCM9Y','zw52q29UDgvUDa','lNzPzxDLCI5SB2nR','vu5pvevtvf9cuK9xu0vs','CMvNzxG','C3bSAxq','C3bSAwnL','vw5ZDxbWB3j0zwrsDw5lAw5KrxjYB3i','C2XPy2u','y3j5ChrV','igLZigfSC28GC2v0igLUihLVDxiGC2HLBgWGzw52AxjVBM1LBNqG4OcuigL0ihDPBgWGA2vLCcbYzxnVBhzPBMCGzNjVBsb0AgvYzsaODgHLigvUDMLYB25Tzw50ihDPBNmGB3zLCIb0AguGzMLSzsKU','ig11C3qGyMuGvvbqrvjFu05bs0uGkguUzY4Gqvbqx0jbu0vFvvjmksbZBYbHihnJzw5HCMLVignHBIbYzwzLCMvUy2uGAxqGyNKGBMfTzs4','lMrLyNvN','BM93','C291CMnLCY5QC29U','x3nJzw5HCMLVCW','AxnsDw5ZrgLYtMfTzq','C2nLBMfYAw9jBMrLEezPBgvoyw1L','yMXVyLjLBfbHDgHgB3i','C2vJCMv0C0XHEwvYrMLSzxngB3i','CNvUswqGy2fYCMLLCYbUBYb0Aw1LC3rHBxaSignHBM5VDcbWBgfJzsbPDcbPBIbHihnOyxjKoIa','DMfSAwrHDgvgC1nHzMvoyw1L','yMXVyNnsB290rM9Y','vu5pvevtvf9erujvrW','AM9PBG','uNvUBMvYqwrHChrLCK5VDezVDw5KrxjYB3i','yxbW','Aw5JBhvKzxm','vu5pvevtvf9erujvr19lruvqx0nbteXt','C2nLBMfYAw9szwzgCM9TrMLSzu5HBwu','mZbWAvLRA1u','Aw5KzxHpzG','z2v0vvrdrgf0zq','DgvZDerPCKzVCG','C3bSAxrmAw5LCW','mZa5otqXmJb6q01Ivgy','igLZigfSC28GC2v0igLUihvUB3rLC3qVlNnLy3jLDhmG4OcuihrOzsbZzwnYzxqGDMfSDwuGC2HHzg93CYb0AgLZig9Uzs4','DgvZDa','C2HHCMrqyxrOrM9YuNvUswq','refuqujbu0vFvvjm','C29YDa','zMLSDgvY','vu5pvevtvf9mt0nbteu','BMfTzq','C2vJCMv0','zMXVB3i','zM9SzfnJzw5HCMLVuNvU','zMXHDe1HCa','vw5WBgfJzwfIBgvsDw5jzevYCM9Y','iIbKB2vZig5VDcbZDxbWB3j0ihj1BIbRAw5Kici','AgfZ','yMXVyIbOyxnOig11C3qGyMuGBg93zxjJyxnLigHLEcWGz290oIa','zMLUzeLUzgv4','Aw5Zzxj0rw52vMfY','AxnbC3nPz25Tzw50t2y','lMPZB25S','zw52tgf5zxjgAwXLC0zVCG','C2HHCMrqyxrOrM9YvgLTzxn0yw1W','ChvZAa','DhjPBq','AxnsDw5UzxjdB25MAwDlzxK','Bwf0y2G','CNvUBMvY','yxbWlxnLCNzLCJPYzwfKEq','lNnLy3jLDhm','yxnZAwDUBwvUDevUDhjPzxm','CNvUswq','BwfRzvj1BKLK','BxvZDcbUB3qGyMuGiI4Iig9YiciUlIi','zgvIDwDNzxjgAwXLrM9Y','y29TCgXLDgvK','AxnbBM5VDgf0Aw9UtgLUzq','nZy2mtu4m2nfEg5hDa','AxnuzxjTAw5HBfj1BNrPBwvtDgf0zq','Dg9tDhjPBMC','Dw5VDgvZDc8Uzw52','y29TBwfUzhmUANnVBMW','C2fUAxrPEMvsDw5jzfnLz21LBNq','Axntzwn0Aw9UrgL2AwrLCG','Dw5RBM93BI1YDw5UzxiTA2v5','iYaTls0G','AxnbC3nPz25Tzw50tgLUzq','CgfKu3rHCNq','C3rKB3v0lMXVzW','zxHHBxbSzq','vu5pvevtvf9ftLy','CgfYC2vfBNzdB250zw50','mJuYotaYD3fqteXZ','A2LUza','C3rHDhvZ','ywjVCNrLza','ntq1mdKXneDKy2Xqzq','CgLJA2vYlxnUyxbZAg90lNr4Da','lMvUDG','nZmZmZyWmePiEgLYDq','y2f0zwDVCML6zvzHCMLHyMXL','AxngywLSAw5Nu3rHDhvZ','sw52ywXPzejSB2jiyxnOrxjYB3i','yMXVyLjLBfnLz21LBNrZrM9Y','BwfUAwzLC3qUANnVBG','CNvU','zMfPBfn0CMvHAW','zw5KC1DPDgG','CMvZzxj2zwrvBMrLCNnJB3jL','Dg9mB3DLCKnHC2u','C3rLChmUANnVBMW','x2HLBhbLCNm'];_0x1ae1=function(){return _0x17fb37;};return _0x1ae1();}__name(isAnnotationLine,_0x353dfc(0xcb));function parseScenarioAnnotations(_0x3d0343){const _0x13ce9a=_0x353dfc,_0x18e8c0=new Set();for(const _0x1a8e30 of _0x3d0343['split'](/\r?\n/)){const _0x1df768=_0x1a8e30['trim']();if(_0x1df768==='')continue;if(!_0x1df768[_0x13ce9a(0x10f)]('//'))break;const _0x5db849=_0x1df768[_0x13ce9a(0xc1)](ANNOTATION_RE);if(_0x5db849)_0x18e8c0['add'](_0x5db849[0x1]);}return{'expectFail':_0x18e8c0['has'](EXPECT_FAIL_ANNOTATION)};}__name(parseScenarioAnnotations,'parseScenarioAnnotations');var SEGMENT_NAME_FORBIDDEN_RE=FS_UNSAFE_NAME_RE;function validateSegmentName(_0x896762){return validateFsSafeName(_0x896762,{'reservedUnderscore':!![]});}__name(validateSegmentName,'validateSegmentName');var TERMINAL_WS_EVENT='terminal',RUNNER_CONFIG_KEYS=new Set([_0x353dfc(0x130),'UNOTEST_HEADED','UNOTEST_SLOW_MO',_0x353dfc(0x115),_0x353dfc(0xfe),'UNOTEST_POPUP_GRACE_MS',_0x353dfc(0x157),'UNOTEST_TIMEZONE','UNOTEST_LOG_LEVEL',_0x353dfc(0x144),_0x353dfc(0x119),_0x353dfc(0x126),'UNOTEST_DEBUG_PREVIEW_BYTES','UNOTEST_DEBUG_HTML_MAX_BYTES',_0x353dfc(0x149),_0x353dfc(0x103),'UNOTEST_CONSOLE','UNOTEST_CACHE_DIR','NO_COLOR',_0x353dfc(0x100),_0x353dfc(0x154)]);function isRunnerConfigKey(_0x3aeba7){const _0x2ae0b2={_0x53f0c3:0x15f},_0x5374f3=_0x353dfc;return RUNNER_CONFIG_KEYS[_0x5374f3(_0x2ae0b2._0x53f0c3)](_0x3aeba7);}__name(isRunnerConfigKey,_0x353dfc(0xc0));function categorizeVariable(_0x4b1cd5){const _0x89c6e={_0x471310:0x108,_0x456f62:0x158,_0x4d5c6a:0xc2,_0x52bf2a:0x147},_0x578924=_0x353dfc;if(_0x4b1cd5[_0x578924(_0x89c6e._0x471310)]===_0x578924(0x101))return _0x578924(0x159);return isRunnerConfigKey(_0x4b1cd5[_0x578924(_0x89c6e._0x456f62)])?_0x578924(_0x89c6e._0x4d5c6a):_0x578924(_0x89c6e._0x52bf2a);}__name(categorizeVariable,_0x353dfc(0xe3));function isExternalVarName(_0x29ed5d){return/^[A-Z][A-Z0-9_]*$/['test'](_0x29ed5d);}__name(isExternalVarName,_0x353dfc(0x104));var ENV_KEY_RE=/^[A-Za-z_][A-Za-z0-9_]*$/;function*assignmentEntries(_0x1bf7c2){const _0x1aefb1={_0x76bad1:0x10f},_0x391f3e=_0x353dfc;for(const _0x5af578 of _0x1bf7c2[_0x391f3e(0x132)](/\r?\n/)){const _0x243428=_0x5af578[_0x391f3e(0xbf)]();if(_0x243428===''||_0x243428[_0x391f3e(_0x1aefb1._0x76bad1)]('#'))continue;const _0x3e4665=_0x243428[_0x391f3e(0x14c)]('=');if(_0x3e4665<=0x0)continue;const _0x27a3b2=_0x243428[_0x391f3e(0x135)](0x0,_0x3e4665)['trim']();if(!ENV_KEY_RE[_0x391f3e(0x152)](_0x27a3b2))continue;yield[_0x27a3b2,_0x243428['slice'](_0x3e4665+0x1)[_0x391f3e(0xbf)]()];}}__name(assignmentEntries,_0x353dfc(0xc5));function parseEnvContent(_0x173dca){const _0x1d355={_0xc08aa1:0x105},_0x329737=_0x353dfc,_0x56b13b={};for(const [_0x5d36d3,_0x4d2e58]of assignmentEntries(_0x173dca)){let _0x597eed=_0x4d2e58;if(_0x597eed[_0x329737(_0x1d355._0xc08aa1)]>=0x2){const _0x326d0f=_0x597eed[0x0],_0x5c9f02=_0x597eed[_0x597eed['length']-0x1];(_0x326d0f==='\x22'||_0x326d0f==='\x27')&&_0x326d0f===_0x5c9f02&&(_0x597eed=_0x597eed[_0x329737(0x135)](0x1,-0x1));}_0x56b13b[_0x5d36d3]=_0x597eed;}return _0x56b13b;}__name(parseEnvContent,_0x353dfc(0xda));function serializeEnvValue(_0x500618){const _0x451a60={_0x180725:0x117},_0x282b0a=_0x353dfc;if(_0x500618==='')return'';if(/[\s#"'=\\]|^[`]/['test'](_0x500618)||/[\n\r]/[_0x282b0a(0x152)](_0x500618)){const _0x10b984=_0x500618[_0x282b0a(_0x451a60._0x180725)](/\\/g,'\x5c\x5c')['replace'](/"/g,'\x5c\x22')[_0x282b0a(0x117)](/\n/g,'\x5cn')['replace'](/\r/g,'\x5cr');return'\x22'+_0x10b984+'\x22';}return _0x500618;}__name(serializeEnvValue,'serializeEnvValue');function envKeys(_0x46a5f8){const _0x19c09e={_0x299ec5:0xf0},_0x4f92a8=_0x353dfc,_0xd79e8=new Set();for(const [_0x8a8b01]of assignmentEntries(_0x46a5f8))_0xd79e8[_0x4f92a8(_0x19c09e._0x299ec5)](_0x8a8b01);return _0xd79e8;}__name(envKeys,'envKeys');function isSectionDivider(_0x402adc){const _0x3b22ea={_0x5b7aae:0xbf,_0x1cd535:0x10f},_0x4a4103=_0x353dfc,_0x1dfb54=_0x402adc[_0x4a4103(_0x3b22ea._0x5b7aae)]();return _0x1dfb54[_0x4a4103(_0x3b22ea._0x1cd535)]('#')&&/---/[_0x4a4103(0x152)](_0x1dfb54);}__name(isSectionDivider,_0x353dfc(0xd2));function isAssignmentLine(_0xb0ff16){const _0x2cbef4={_0x5aac57:0xbf,_0x1e5f4b:0x152},_0x18887b=_0x353dfc,_0x55a21c=_0xb0ff16[_0x18887b(_0x2cbef4._0x5aac57)]();if(_0x55a21c===''||_0x55a21c['startsWith']('#'))return![];const _0x5bc9f1=_0x55a21c['indexOf']('=');return _0x5bc9f1>0x0&&ENV_KEY_RE[_0x18887b(_0x2cbef4._0x1e5f4b)](_0x55a21c['slice'](0x0,_0x5bc9f1)[_0x18887b(0xbf)]());}__name(isAssignmentLine,_0x353dfc(0xd5));function isAssignmentOf(_0x4e9ac0,_0x37162e){const _0x50379b={_0x127188:0x10f,_0x4cfca3:0xbf},_0x1eb962=_0x353dfc,_0x357783=_0x4e9ac0['trim']();if(_0x357783===''||_0x357783[_0x1eb962(_0x50379b._0x127188)]('#'))return![];const _0x5734a5=_0x357783['indexOf']('=');if(_0x5734a5<=0x0)return![];return _0x357783[_0x1eb962(0x135)](0x0,_0x5734a5)[_0x1eb962(_0x50379b._0x4cfca3)]()===_0x37162e;}__name(isAssignmentOf,_0x353dfc(0x163));function splitLines(_0x51fa72){const _0x1a9e44={_0x52451c:0xea},_0x3c5fa7=_0x353dfc,_0x4417b9=_0x51fa72[_0x3c5fa7(_0x1a9e44._0x52451c)]('\x0a'),_0x329201=_0x4417b9?_0x51fa72[_0x3c5fa7(0x135)](0x0,-0x1):_0x51fa72;return{'lines':_0x329201===''?[]:_0x329201['split']('\x0a'),'trailingNewline':_0x4417b9};}__name(splitLines,_0x353dfc(0x14f));function joinLines(_0x5860f7,_0x58f915){const _0x37c277=_0x5860f7['join']('\x0a');return _0x58f915||_0x37c277===''?_0x37c277+'\x0a':_0x37c277;}__name(joinLines,_0x353dfc(0xf9));function insertEnvVar(_0x529156,_0x876b69,_0x419c36,_0x2cf5ee){const _0x31f1a6={_0x13abb9:0x161,_0x1c4bad:0x133,_0x80557b:0xbe,_0x1ee07b:0xd4,_0x105a8a:0xbe},_0x4d720d=_0x353dfc,_0x30357d=_0x876b69+'='+serializeEnvValue(_0x419c36),{lines:_0x4fa0e8,trailingNewline:_0x1ff175}=splitLines(_0x529156);if(_0x2cf5ee){const _0x1e4019=new RegExp('\x5cb'+_0x2cf5ee[_0x4d720d(0xec)]()+'\x5cb'),_0x177150=_0x4fa0e8[_0x4d720d(_0x31f1a6._0x13abb9)](_0x2975b0=>isSectionDivider(_0x2975b0)&&_0x1e4019[_0x4d720d(0x152)](_0x2975b0[_0x4d720d(0xec)]()));if(_0x177150!==-0x1){let _0x5327f4=_0x4fa0e8[_0x4d720d(0x105)];for(let _0x2e14e0=_0x177150+0x1;_0x2e14e0<_0x4fa0e8['length'];_0x2e14e0++){if(isSectionDivider(_0x4fa0e8[_0x2e14e0])){_0x5327f4=_0x2e14e0;break;}}let _0x58769d=-0x1,_0x5b9a3c=-0x1;for(let _0x225e9d=_0x177150+0x1;_0x225e9d<_0x5327f4;_0x225e9d++){if(_0x4fa0e8[_0x225e9d][_0x4d720d(0xbf)]()!=='')_0x5b9a3c=_0x225e9d;if(isAssignmentLine(_0x4fa0e8[_0x225e9d]))_0x58769d=_0x225e9d;}const _0x22e3db=_0x58769d>=0x0?_0x58769d:_0x5b9a3c,_0x2dda94=_0x22e3db>=0x0?_0x22e3db+0x1:_0x177150+0x1;return _0x4fa0e8[_0x4d720d(_0x31f1a6._0x1c4bad)](_0x2dda94,0x0,_0x30357d),joinLines(_0x4fa0e8,_0x1ff175||_0x4fa0e8[_0x4d720d(0x105)]>0x0);}if(_0x4fa0e8['length']>0x0)_0x4fa0e8[_0x4d720d(_0x31f1a6._0x80557b)]('');return _0x4fa0e8['push'](_0x4d720d(_0x31f1a6._0x1ee07b)+_0x2cf5ee+'\x20---',_0x30357d),joinLines(_0x4fa0e8,!![]);}return _0x4fa0e8[_0x4d720d(_0x31f1a6._0x105a8a)](_0x30357d),joinLines(_0x4fa0e8,!![]);}__name(insertEnvVar,_0x353dfc(0x162));function removeEnvVar(_0x571f48,_0x6ade67){const _0x40d184=_0x353dfc,{lines:_0x39b4d0,trailingNewline:_0xe9a459}=splitLines(_0x571f48),_0x1e14a7=_0x39b4d0[_0x40d184(0x156)](_0x192a5e=>!isAssignmentOf(_0x192a5e,_0x6ade67)),_0x2e6f49=_0x1e14a7[_0x40d184(0x105)]!==_0x39b4d0['length'];return{'content':joinLines(_0x1e14a7,_0xe9a459),'removed':_0x2e6f49};}__name(removeEnvVar,_0x353dfc(0x10b));var SECTION_BY_KIND={'app':_0x353dfc(0x123),'runner':_0x353dfc(0x121),'secret':void 0x0};function planAddVariable(_0x4739b5){const _0x16cbbe={_0xee54c6:0xc2,_0x5c7540:0xd3,_0x5c575c:0x15f,_0x46d824:0x101,_0x2eb25e:0xf2,_0x419e89:0x12b,_0x11dfbf:0x159,_0x454258:0x151},_0x1dea46=_0x353dfc,{name:_0x37d0f2,kind:_0x1532e0}=_0x4739b5;if(_0x1532e0===_0x1dea46(_0x16cbbe._0xee54c6)){if(!isRunnerConfigKey(_0x37d0f2))return{'ok':![],'code':_0x1dea46(_0x16cbbe._0x5c7540),'message':_0x37d0f2+'\x20is\x20not\x20a\x20known\x20runner\x20setting\x20—\x20choose\x20one\x20from\x20the\x20runner-config\x20list.'};}else{if(!isExternalVarName(_0x37d0f2))return{'ok':![],'code':_0x1dea46(0x10d),'message':_0x37d0f2+_0x1dea46(0x138)};}const _0x1f49a3=envKeys(_0x4739b5[_0x1dea46(0x12e)])[_0x1dea46(0x15f)](_0x37d0f2),_0x3b3215=envKeys(_0x4739b5['secretsContent'])[_0x1dea46(_0x16cbbe._0x5c575c)](_0x37d0f2),_0x2438d8=_0x1532e0==='secret'?_0x1dea46(_0x16cbbe._0x46d824):'env',_0x235094=_0x2438d8===_0x1dea46(_0x16cbbe._0x46d824)?_0x3b3215:_0x1f49a3,_0x37959a=_0x2438d8===_0x1dea46(0x101)?_0x1dea46(0x11f):_0x1dea46(0xcf);if(_0x235094)return{'ok':![],'code':_0x1dea46(_0x16cbbe._0x2eb25e),'message':_0x37d0f2+'\x20already\x20exists\x20in\x20'+_0x37959a+_0x1dea46(_0x16cbbe._0x419e89)};const _0x4cba31=[];return _0x1532e0===_0x1dea46(_0x16cbbe._0x11dfbf)&&_0x1f49a3&&_0x4cba31[_0x1dea46(0xbe)](_0x37d0f2+_0x1dea46(0xfb)),_0x1532e0!==_0x1dea46(_0x16cbbe._0x11dfbf)&&_0x3b3215&&_0x4cba31[_0x1dea46(0xbe)](_0x37d0f2+_0x1dea46(_0x16cbbe._0x454258)),{'ok':!![],'target':_0x2438d8,'sectionLabel':SECTION_BY_KIND[_0x1532e0],'warnings':_0x4cba31};}__name(planAddVariable,_0x353dfc(0xef));function deleteShadowWarning(_0x5c80e6,_0x451da1,_0xbb35b7){const _0x127c84=_0x353dfc;if(_0xbb35b7!==void 0x0&&_0xbb35b7!==_0x451da1)return[_0x5c80e6+_0x127c84(0x137)];return[];}__name(deleteShadowWarning,'deleteShadowWarning');var TERMINAL_RUNTIME_STATES=[_0x353dfc(0xca),_0x353dfc(0x128),_0x353dfc(0xde)];function isTerminalRuntimeState(_0x453631){const _0x3ab854={_0x33087b:0x148},_0xa2bd8d=_0x353dfc;return TERMINAL_RUNTIME_STATES[_0xa2bd8d(_0x3ab854._0x33087b)](_0x453631);}__name(isTerminalRuntimeState,_0x353dfc(0xcd));function _0x57ef(_0x48d0cc,_0x4f885c){_0x48d0cc=_0x48d0cc-0xbe;const _0x1ae11e=_0x1ae1();let _0x57efc9=_0x1ae11e[_0x48d0cc];if(_0x57ef['lScCre']===undefined){var _0x2e77ab=function(_0x1b4da2){const _0x3551bb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x383154='',_0x4db121='';for(let _0x5c97ab=0x0,_0x4eee5d,_0x17f776,_0x304eb9=0x0;_0x17f776=_0x1b4da2['charAt'](_0x304eb9++);~_0x17f776&&(_0x4eee5d=_0x5c97ab%0x4?_0x4eee5d*0x40+_0x17f776:_0x17f776,_0x5c97ab++%0x4)?_0x383154+=String['fromCharCode'](0xff&_0x4eee5d>>(-0x2*_0x5c97ab&0x6)):0x0){_0x17f776=_0x3551bb['indexOf'](_0x17f776);}for(let _0x4e19cc=0x0,_0x1787cc=_0x383154['length'];_0x4e19cc<_0x1787cc;_0x4e19cc++){_0x4db121+='%'+('00'+_0x383154['charCodeAt'](_0x4e19cc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4db121);};_0x57ef['diRVIV']=_0x2e77ab,_0x57ef['FwfGMe']={},_0x57ef['lScCre']=!![];}const _0x5b22ec=_0x1ae11e[0x0],_0xbbe449=_0x48d0cc+_0x5b22ec,_0x5425dc=_0x57ef['FwfGMe'][_0xbbe449];return!_0x5425dc?(_0x57efc9=_0x57ef['diRVIV'](_0x57efc9),_0x57ef['FwfGMe'][_0xbbe449]=_0x57efc9):_0x57efc9=_0x5425dc,_0x57efc9;}export{BLOBS_DIR,COLLECTIONS_SUBDIR,COLLECTION_NAME_FORBIDDEN_RE,COMMANDS_FILE,DAY_INDEX_FILE,E2E_SUBDIR,ENV_FILE,EXPECT_FAIL_ANNOTATION,HEARTBEAT_FILE,HELPERS_SUBDIR,InvalidBlobHashError,LOCK_FILE,LOG_FILE,PICKER_SNAPSHOT_FILE,RUNNER_CONFIG_KEYS,RUNS_SUBDIR,RUNTIME_FILE,RUN_INDEX_SCHEMA_VERSION,RUN_MANIFEST_FILE,RUN_SOURCES_FILE,RunnerAdapterNotFoundError,RunnerNotConfiguredError,SCENARIOS_INDEX_DIR,SCENARIOS_LATEST_FILE,SCENARIO_RECENT_WINDOW,SECRETS_FILE,SEGMENT_NAME_FORBIDDEN_RE,SNAPSHOTS_SUBDIR,STDERR_FILE,STDOUT_FILE,STEPS_FILE,TERMINAL_RUNTIME_STATES,TERMINAL_WS_EVENT,UNOTEST_DIR,UnplaceableRunIdError,UnsupportedRunKindError,activeEnvName,blobPathFor,blobRelPathFor,blobRelSegmentsFor,blobsRootFor,categorizeVariable,debugDirFor,debuggerFileFor,deleteShadowWarning,envFileFor,envKeys,envLayerFilesFor,envNamesFromDirListing,foldScenarioRun,insertEnvVar,isAnnotationLine,isExternalVarName,isFailingStatus,isRegexLiteral,isRunnerConfigKey,isRunsDirName,isTerminalRuntimeState,makeRunId,parseAppServerEvent,parseEnvContent,parseScenarioAnnotations,planAddVariable,projectRunDirFor,projectRunsRoot,regexLiteral,removeEnvVar,requireRunDirFor,runDirFor,runIdStartedAt,runsDirFor,sanitizeRunIdSegment,scenarioIndexFileName,scenarioRefFromFileName,secretsFileFor,secretsLayerFilesFor,serializeEnvValue,shardDaysDescending,shardDirFor,shardPathForRunId,shardPathForTimestamp,testDirFor,validateCollectionName,validateSegmentName};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unotest/protocol",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "Cross-runner protocol for the @unotest ecosystem: shared TypeScript types, path constants, the IRunnerAdapter contract that lets @unotest/viewer drive @unotest/web, @unotest/mobile (and future runners) through the same surface. Pure types + pure functions only — zero runtime deps, browser-safe.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {