@testrelic/core 2.14.0-next.114 → 2.16.0-next.124

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/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * All interfaces for the JSON output schema, reporter configuration,
5
5
  * and internal fixture-to-reporter communication.
6
6
  *
7
- * Schema Version: 1.0.0
7
+ * Schema Version: 1.6.0
8
8
  */
9
9
  type NavigationType = 'goto' | 'navigation' | 'back' | 'forward' | 'refresh' | 'spa_route' | 'spa_replace' | 'hash_change' | 'link_click' | 'form_submit' | 'redirect' | 'popstate' | 'page_load' | 'manual_record' | 'fallback' | 'dummy';
10
10
  interface TestRunReport {
@@ -56,6 +56,30 @@ interface Summary {
56
56
  readonly totalTimelineSteps: number;
57
57
  readonly totalActionSteps: number;
58
58
  readonly actionStepsByCategory: Record<string, number>;
59
+ /** Visual baseline comparisons across the run. */
60
+ readonly visualChecks?: number;
61
+ /** Of those, how many differed from their baseline. */
62
+ readonly visualFailures?: number;
63
+ /** Of those, how many had no baseline and wrote one. */
64
+ readonly visualNew?: number;
65
+ /** DOM elements that differed across the run's visual comparisons. */
66
+ readonly visualDomChanges?: number;
67
+ /** Action steps across the run, bucketed by the driver's own category. */
68
+ readonly actionStepsByKind?: Record<string, number>;
69
+ /** Device-log lines captured across the run (mobile). */
70
+ readonly deviceLogLines?: number;
71
+ /** Of those, how many were error or fatal. */
72
+ readonly deviceLogErrors?: number;
73
+ /** Of those, how many came from a crash log. */
74
+ readonly deviceLogCrashes?: number;
75
+ /** Screenshots captured across the run. */
76
+ readonly screenshotCount?: number;
77
+ /** Screen recordings captured across the run. */
78
+ readonly videoCount?: number;
79
+ /** AI-detected defects across the run, by severity. */
80
+ readonly aiDefectsBySeverity?: Record<string, number>;
81
+ /** Distinct devices the run touched. */
82
+ readonly devices?: readonly DeviceInfo[];
59
83
  }
60
84
  interface CIMetadata {
61
85
  readonly provider: CIProvider;
@@ -99,6 +123,12 @@ interface TestResult {
99
123
  readonly apiAssertions: readonly ApiAssertion[] | null;
100
124
  readonly actions: readonly ActionStep[] | null;
101
125
  readonly consoleLogs: readonly ConsoleLogEntry[] | null;
126
+ /** Visual baseline comparisons recorded during this test, if any. */
127
+ readonly visual?: readonly VisualComparison[] | null;
128
+ /** The device this test drove (mobile runs only). */
129
+ readonly device?: DeviceInfo | null;
130
+ /** AI-detected defects attributed to this test. */
131
+ readonly aiDefects?: readonly AiDefect[] | null;
102
132
  }
103
133
  type ResourceType = 'xhr' | 'document' | 'script' | 'stylesheet' | 'image' | 'font' | 'other';
104
134
  interface CapturedNetworkRequest {
@@ -121,6 +151,15 @@ interface CapturedNetworkRequest {
121
151
  }
122
152
  interface TestArtifacts {
123
153
  readonly screenshot?: string;
154
+ /**
155
+ * Every screenshot captured for this test, report-relative.
156
+ *
157
+ * `screenshot` is the first one and stays for compatibility. Mobile
158
+ * collectors have always gathered an array — one per step, or one per
159
+ * failure — and only index 0 survived: the artifact copier wrote a single
160
+ * `screenshot.png` and dropped the rest before the report could ask.
161
+ */
162
+ readonly screenshots?: readonly string[];
124
163
  readonly video?: string;
125
164
  /**
126
165
  * Playwright's trace archive — the DOM snapshots, network log and screencast
@@ -138,8 +177,183 @@ interface TestArtifacts {
138
177
  readonly videoKey?: string;
139
178
  readonly traceKey?: string;
140
179
  }
180
+ /**
181
+ * Outcome of a single visual baseline comparison.
182
+ *
183
+ * `new` is a snapshot Playwright had no baseline for and therefore wrote one
184
+ * for — it is not a pass, because nothing was actually compared. `updated`
185
+ * means the run was invoked with `--update-snapshots` and the baseline was
186
+ * rewritten, which likewise compares nothing.
187
+ */
188
+ type VisualStatus = 'passed' | 'failed' | 'new' | 'updated';
189
+ /** Which assertion produced a comparison. */
190
+ type VisualSource = 'toHaveScreenshot' | 'toMatchSnapshot' | 'toMatchVisualBaseline';
191
+ /**
192
+ * One visual baseline comparison within a test.
193
+ *
194
+ * A test may hold many of these — `TestArtifacts` deliberately is not the home
195
+ * for them, because it is single-slot per type (one screenshot, one video, one
196
+ * trace) while a single test can assert against any number of named snapshots.
197
+ *
198
+ * Every image field is a report-relative POSIX path, matching `TestArtifacts`.
199
+ * A passing comparison carries no `actual` or `diff`: Playwright attaches
200
+ * nothing when the images match, so there is nothing to copy.
201
+ */
202
+ interface VisualComparison {
203
+ /** Snapshot identity within the test, e.g. `home` or `checkout/cart`. */
204
+ readonly name: string;
205
+ readonly status: VisualStatus;
206
+ readonly source: VisualSource;
207
+ /** The committed baseline image. */
208
+ readonly baseline?: string;
209
+ /** What this run rendered. Absent when the comparison passed. */
210
+ readonly actual?: string;
211
+ /** Playwright's rendered diff. Present only on failure. */
212
+ readonly diff?: string;
213
+ /** The previous attempt's render, on a retried failure. */
214
+ readonly previous?: string;
215
+ /** Baseline dimensions, read from the PNG header. */
216
+ readonly width?: number;
217
+ readonly height?: number;
218
+ /** Actual dimensions — set only when they differ from the baseline. */
219
+ readonly actualWidth?: number;
220
+ readonly actualHeight?: number;
221
+ /** Differing pixel count, as reported by Playwright's comparator. */
222
+ readonly diffPixels?: number;
223
+ /** `diffPixels / (width * height)`, computed at full precision. */
224
+ readonly diffPixelRatio?: number;
225
+ /** Cloud storage keys, populated after artifact upload. */
226
+ readonly baselineKey?: string;
227
+ readonly actualKey?: string;
228
+ readonly diffKey?: string;
229
+ /**
230
+ * Which elements changed, ranked by the area they affect.
231
+ *
232
+ * Present only when a DOM baseline existed to compare against. Capped — see
233
+ * `domChangeCount` for the number found before the cap.
234
+ */
235
+ readonly domChanges?: readonly DomChange[];
236
+ /** Total changes found, which may exceed `domChanges.length`. */
237
+ readonly domChangeCount?: number;
238
+ /**
239
+ * Of those, how many actually changed rather than merely shifting position.
240
+ *
241
+ * The gap between this and `domChangeCount` is the layout knock-on: one card
242
+ * gaining a margin moves everything below it, and a report that presents all
243
+ * of those as equals hides the single edit that caused them.
244
+ */
245
+ readonly domRootCauses?: number;
246
+ /** True when the DOM capture itself hit a node or byte cap. */
247
+ readonly domTruncated?: boolean;
248
+ /** Report-relative paths to the two captured DOM snapshots. */
249
+ readonly baselineDom?: string;
250
+ readonly actualDom?: string;
251
+ /**
252
+ * The document-space region the screenshot covered: `[x, y, width, height]`.
253
+ *
254
+ * Element rectangles are in document coordinates, so the report needs this to
255
+ * place a box over the image — for a locator screenshot the image covers only
256
+ * that element's box, not the viewport.
257
+ */
258
+ readonly domCaptureBox?: readonly [number, number, number, number];
259
+ /** Cloud storage keys for the DOM snapshots. */
260
+ readonly baselineDomKey?: string;
261
+ readonly actualDomKey?: string;
262
+ }
263
+ /** How an element differs between the baseline render and this one. */
264
+ type DomChangeKind = 'added' | 'removed' | 'moved' | 'resized' | 'restyled' | 'text'
265
+ /** Its id or class list changed — often the real story behind a restyle. */
266
+ | 'attrs';
267
+ /** One computed style property that differs. */
268
+ interface DomStyleChange {
269
+ readonly prop: string;
270
+ readonly from: string;
271
+ readonly to: string;
272
+ }
273
+ /**
274
+ * One element that differs between two renders.
275
+ *
276
+ * Deliberately shaped like the platform's existing `RegionEvidence` — rank,
277
+ * bbox, area share, a kind and a human label — so that a DOM overlay becomes
278
+ * another caller of the dashboard's existing box-overlay component rather than
279
+ * a second renderer built alongside it.
280
+ */
281
+ interface DomChange {
282
+ /** 1-based, ordered by affected area descending. Drives the overlay colour. */
283
+ readonly rank: number;
284
+ /** Structural path used to match the element across the two snapshots. */
285
+ readonly path: string;
286
+ /** What a human reads, e.g. `div.card.accent`. */
287
+ readonly label: string;
288
+ readonly kinds: readonly DomChangeKind[];
289
+ /** Document-space `[x, y, width, height]` in this render. */
290
+ readonly rect?: readonly [number, number, number, number];
291
+ /** The same, in the baseline. Absent for an added element. */
292
+ readonly baselineRect?: readonly [number, number, number, number];
293
+ /** Share of the capture box this element occupies, 0–1. */
294
+ readonly areaPct: number;
295
+ readonly styles?: readonly DomStyleChange[];
296
+ readonly text?: {
297
+ readonly from: string;
298
+ readonly to: string;
299
+ };
300
+ /** Identity attributes that changed, e.g. `class: "card" → "banner"`. */
301
+ readonly attrs?: readonly DomStyleChange[];
302
+ /**
303
+ * True when this element only moved or resized, in a comparison where
304
+ * something else actually changed.
305
+ *
306
+ * Shifting one card down by 24px shifts everything below it too, so a naive
307
+ * list reports eleven changes for one edit. This flags the ten that merely
308
+ * got pushed around, so a report can lead with the one that did something.
309
+ *
310
+ * It is a statement about this element — that nothing about it changed except
311
+ * its position — and deliberately not a claim to have proven what moved it.
312
+ */
313
+ readonly consequence?: boolean;
314
+ }
141
315
  type TestStatus = 'passed' | 'failed' | 'skipped' | 'flaky' | 'timedout';
142
316
  type TestType = 'e2e' | 'api' | 'unit' | 'mobile' | 'unknown';
317
+ /** Platform a mobile test drove. */
318
+ type MobilePlatform = 'android' | 'ios' | 'web' | 'unknown';
319
+ /** How the app under test was driven. */
320
+ type AppTestMode = 'native' | 'hybrid' | 'mobile-web';
321
+ /**
322
+ * The device a mobile test ran on.
323
+ *
324
+ * Appium detects all of this from the W3C capabilities and Maestro reads it
325
+ * from the CLI flags and driver log. Both used to collapse it to two words in
326
+ * `tags` before the report saw it; this carries it through intact.
327
+ */
328
+ interface DeviceInfo {
329
+ readonly platform: MobilePlatform;
330
+ /** OS version, e.g. "14" or "17.5". */
331
+ readonly platformVersion: string | null;
332
+ /** Human-facing device name, e.g. "Pixel 4a" or "iPhone 15". */
333
+ readonly deviceName: string | null;
334
+ /** Driver, e.g. "UiAutomator2", "XCUITest", "maestro". */
335
+ readonly automationName: string | null;
336
+ /** App package / bundle id / apk path under test. */
337
+ readonly appId: string | null;
338
+ /** Native, hybrid or mobile-web. Null when the runner cannot tell. */
339
+ readonly appTestMode: AppTestMode | null;
340
+ /** Device serial or UDID, e.g. "emulator-5554". */
341
+ readonly udid: string | null;
342
+ }
343
+ /** Severity of an AI-detected defect. */
344
+ type AiDefectSeverity = 'critical' | 'warning' | 'info';
345
+ /** Category of an AI-detected defect. */
346
+ type AiDefectType = 'ui' | 'spelling' | 'i18n' | 'layout' | 'accessibility';
347
+ /** A defect reported by an AI analysis pass over a captured screen. */
348
+ interface AiDefect {
349
+ readonly type: AiDefectType;
350
+ readonly severity: AiDefectSeverity;
351
+ readonly description: string;
352
+ /** Where in the app it was seen, when the analyser says. */
353
+ readonly location: string | null;
354
+ /** Report-relative path to the screenshot it was found on. */
355
+ readonly screenshot: string | null;
356
+ }
143
357
  interface FailureDiagnostic {
144
358
  readonly message: string;
145
359
  readonly line: number | null;
@@ -218,6 +432,13 @@ interface AssertionLocation {
218
432
  /** Column number (1-based), if available */
219
433
  readonly column?: number;
220
434
  }
435
+ /** A failed assertion reduced to what a summary row needs. */
436
+ interface FailedAssertionSummary {
437
+ readonly type: AssertionType;
438
+ readonly expected: string;
439
+ readonly actual: string;
440
+ readonly expression?: string;
441
+ }
221
442
  /** A single captured assertion on API response data. */
222
443
  interface ApiAssertion {
223
444
  /** Links to ApiCallRecord.id from the API proxy */
@@ -309,10 +530,24 @@ type TimelineStep = NavigationStep | ApiCallStep;
309
530
  * distinct bucket from generic `custom_step`.
310
531
  */
311
532
  type ActionCategory = 'ui_action' | 'assertion' | 'navigation' | 'custom_step';
533
+ /**
534
+ * The driver's own step category, preserved alongside `ActionCategory`.
535
+ *
536
+ * `ActionCategory` is the four-bucket vocabulary the platform's timeline and
537
+ * Ask AI tools filter on, and it stays closed. Mobile drivers distinguish far
538
+ * more than four kinds — Appium reports eleven, Maestro ten — and flattening
539
+ * them made a swipe, an app launch and a screenshot render identically. This
540
+ * keeps the finer label for the report to badge.
541
+ */
542
+ type StepKind = 'find' | 'interaction' | 'gesture' | 'navigation' | 'lifecycle' | 'context' | 'device' | 'keyboard' | 'alert' | 'screenshot' | 'assertion' | 'media' | 'script' | 'flow_control' | 'ai' | 'other';
312
543
  /** A single captured test action step. */
313
544
  interface ActionStep {
314
545
  readonly title: string;
315
546
  readonly category: ActionCategory;
547
+ /** The driver's own finer-grained category, when it reported one. */
548
+ readonly kind?: StepKind | null;
549
+ /** Element selector this step acted on, when the driver reported one. */
550
+ readonly selector?: string | null;
316
551
  readonly timestamp: string;
317
552
  readonly duration: number;
318
553
  readonly videoOffset: number | null;
@@ -323,6 +558,14 @@ interface ActionStep {
323
558
  /** Level of a captured console/terminal log message. */
324
559
  type ConsoleLogLevel = 'log' | 'warn' | 'error' | 'info' | 'debug' | 'stdout' | 'stderr';
325
560
  /** A single captured console or terminal log entry. */
561
+ /**
562
+ * Where a captured log line came from.
563
+ *
564
+ * Browser consoles only ever produce `console`. Mobile runs mix several
565
+ * streams, and telling a crash log from ordinary logcat chatter is the whole
566
+ * point of showing them — so the stream survives to the row.
567
+ */
568
+ type LogSource = 'console' | 'logcat' | 'syslog' | 'crashlog' | 'browser' | 'safariConsole' | 'performance' | 'server' | 'bidi' | 'driver';
326
569
  interface ConsoleLogEntry {
327
570
  /** Log level or stream type */
328
571
  readonly level: ConsoleLogLevel;
@@ -332,6 +575,14 @@ interface ConsoleLogEntry {
332
575
  readonly timestamp: string;
333
576
  /** Source file location (browser console only, best-effort) */
334
577
  readonly location: string | null;
578
+ /** Which stream produced the line. Defaults to `console` when absent. */
579
+ readonly source?: LogSource | null;
580
+ /** Emitting tag, e.g. an Android logcat tag like "ActivityManager". */
581
+ readonly tag?: string | null;
582
+ /** Emitting process id, when the stream reports one. */
583
+ readonly pid?: number | null;
584
+ /** Stack trace attached to the line (crash logs). */
585
+ readonly stackTrace?: string | null;
335
586
  }
336
587
  /** Report generation mode. */
337
588
  type ReportMode = 'streaming' | 'embedded' | 'auto';
@@ -466,6 +717,14 @@ interface TestRelicFilePayload {
466
717
  readonly apiCallsFile: string | null;
467
718
  /** Number of API call items in the file. */
468
719
  readonly apiCallsCount: number;
720
+ /**
721
+ * Response-status mix of the calls in the file.
722
+ *
723
+ * Tallied as each record is appended. The file itself is never read back
724
+ * into memory in streaming mode, so an aggregate computed at write time is
725
+ * the only way the grid can show a row's status chips.
726
+ */
727
+ readonly apiStatusMix?: ApiCallsByStatusRange | null;
469
728
  }
470
729
  /** Type guard: validates that a parsed object is a v2 file-based payload. */
471
730
  declare function isTestRelicFilePayload(obj: unknown): obj is TestRelicFilePayload;
@@ -562,7 +821,7 @@ interface ArtifactFile {
562
821
  /** File name (e.g., `screenshot.png`, `video.webm`, `trace.zip`) */
563
822
  readonly name: string;
564
823
  /** Artifact type for rendering */
565
- readonly type: 'screenshot' | 'video' | 'trace' | 'other';
824
+ readonly type: 'screenshot' | 'video' | 'trace' | 'baseline' | 'diff' | 'dom' | 'other';
566
825
  /** Path relative to the report output directory */
567
826
  readonly relativePath: string;
568
827
  /** File size in bytes */
@@ -625,6 +884,8 @@ interface TestIndexEntry {
625
884
  readonly retryIndex: number;
626
885
  /** Test tags */
627
886
  readonly tags: readonly string[];
887
+ /** What kind of test this is — badges the row, and picks the row's evidence. */
888
+ readonly testType?: TestType;
628
889
  /** Whether this test has network request data */
629
890
  readonly hasNetworkData: boolean;
630
891
  /** Whether this test has console log data */
@@ -633,6 +894,20 @@ interface TestIndexEntry {
633
894
  readonly hasArtifacts: boolean;
634
895
  /** Whether this test has action step data */
635
896
  readonly hasActionSteps: boolean;
897
+ /** Number of visual baseline comparisons recorded */
898
+ readonly visualCount?: number;
899
+ /** Of those, how many differed from their baseline */
900
+ readonly visualFailedCount?: number;
901
+ /** DOM elements that differed across this test's comparisons */
902
+ readonly domChangeCount?: number;
903
+ /**
904
+ * Report-relative path to a diff image for this test, when one exists.
905
+ *
906
+ * Carried on the index so the run overview can show the failure itself
907
+ * rather than only describing it — the grid must never fetch per-test
908
+ * detail files to render.
909
+ */
910
+ readonly visualDiffPath?: string;
636
911
  /** First line of error message (failed/flaky tests only) */
637
912
  readonly errorMessage: string | null;
638
913
  /** Number of network requests captured */
@@ -641,6 +916,34 @@ interface TestIndexEntry {
641
916
  readonly consoleCount: number;
642
917
  /** Number of action steps captured */
643
918
  readonly actionCount: number;
919
+ /** API calls captured for this test. */
920
+ readonly apiCallCount?: number;
921
+ /** Response-status mix of those calls, for the row's status chips. */
922
+ readonly apiStatusMix?: ApiCallsByStatusRange;
923
+ /** API assertions that passed during this test. */
924
+ readonly assertionsPassed?: number;
925
+ /** API assertions that failed during this test. */
926
+ readonly assertionsFailed?: number;
927
+ /**
928
+ * The first failed assertion, flattened to strings.
929
+ *
930
+ * The run overview leads with "expected 101, received undefined" and must
931
+ * do so without opening the test's detail file. The first line of an API
932
+ * failure message is the matcher wrapper, which says nothing.
933
+ */
934
+ readonly firstFailedAssertion?: FailedAssertionSummary;
935
+ /** The device this test drove (mobile runs only). */
936
+ readonly device?: DeviceInfo | null;
937
+ /** Action steps for this test, bucketed by the driver's own category. */
938
+ readonly stepKinds?: Record<string, number>;
939
+ /** Device-log errors and fatals recorded during this test. */
940
+ readonly deviceLogErrors?: number;
941
+ /** Whether a crash-log line was recorded during this test. */
942
+ readonly hasCrashLog?: boolean;
943
+ /** Whether a screen recording exists for this test. */
944
+ readonly hasVideo?: boolean;
945
+ /** AI-detected defects attributed to this test. */
946
+ readonly aiDefectCount?: number;
644
947
  /** Whether this is a retry attempt (not the final attempt) */
645
948
  readonly isRetry: boolean;
646
949
  /** Stable key shared by every attempt of the same test (same across retries, unlike `id`) */
@@ -664,6 +967,8 @@ interface TestDetailData {
664
967
  readonly actions: readonly ActionStep[];
665
968
  /** References to screenshot/video files */
666
969
  readonly artifacts: TestArtifacts | null;
970
+ /** Visual baseline comparisons (inline — a handful per test at most) */
971
+ readonly visual?: readonly VisualComparison[] | null;
667
972
  /** Error details for failed/flaky tests */
668
973
  readonly failureDiagnostic: FailureDiagnostic | null;
669
974
  /** Whether network.jsonl exists for this test */
@@ -680,6 +985,10 @@ interface TestDetailData {
680
985
  readonly apiCallsCount: number;
681
986
  /** Test start time (ISO 8601) — used for video sync */
682
987
  readonly startedAt?: string;
988
+ /** The device this test drove (mobile runs only). */
989
+ readonly device?: DeviceInfo | null;
990
+ /** AI-detected defects attributed to this test. */
991
+ readonly aiDefects?: readonly AiDefect[] | null;
683
992
  }
684
993
  /** Streaming report summary — running counters written to summary.json. */
685
994
  interface StreamingReportSummary {
@@ -833,4 +1142,4 @@ declare function isValidCloudConfig(input: unknown): input is CloudConfig;
833
1142
  declare function isValidQueueEntry(input: unknown): input is QueueEntry;
834
1143
  declare function isValidTestRunReport(value: unknown): value is TestRunReport;
835
1144
 
836
- export { ATTACHMENT_CONTENT_TYPE, ATTACHMENT_NAME, type ActionCategory, type ActionStep, type ApiAssertion, type ApiCallRecord, type ApiCallStep, type ApiCallStepRequest, type ApiCallStepResponse, type ArtifactFile, type ArtifactRunEntry, type ArtifactRunManifest, type ArtifactTestEntry, type AssertionLocation, type AssertionType, type AuthMode, type AuthState, type CIMetadata, type CIProvider, type CapturedNetworkRequest, type CloudConfig, type CloudReporterOptions, type ConsoleLogEntry, type ConsoleLogLevel, ErrorCode, type FailureDiagnostic, type GitMetadata, type LogLevel, type Logger, type LoggerOptions, type MergeOptions, type NavigationAnnotation, type NavigationStep, type NavigationType, type NetworkStats, PAYLOAD_VERSION, PAYLOAD_VERSION_LEGACY, type QueueEntry, type RepoResolution, type ReportMode, type ReporterConfig, type ResourceBreakdown, type ResourceType, type StepAssertion, type StepTestIdentity, type StreamingFileStats, type StreamingReportManifest, type StreamingReportSummary, type StreamingValidation, type StreamingWriteError, type Summary, type TestArtifacts, type TestDetailData, type TestIndexEntry, type TestRelicDataPayload, TestRelicError, type TestRelicFilePayload, type TestResult, type TestRunReport, type TestStatus, type TestType, type TimelineEntry, type TimelineStep, type UploadStrategy, createError, createLogger, isTestRelicDataPayload, isTestRelicFilePayload, isValidApiKeyFormat, isValidCloudConfig, isValidConfig, isValidEndpointUrl, isValidNavigationType, isValidQueueEntry, isValidTestRunReport, isValidUploadStrategy };
1145
+ export { ATTACHMENT_CONTENT_TYPE, ATTACHMENT_NAME, type ActionCategory, type ActionStep, type AiDefect, type AiDefectSeverity, type AiDefectType, type ApiAssertion, type ApiCallRecord, type ApiCallStep, type ApiCallStepRequest, type ApiCallStepResponse, type ApiCallsByStatusRange, type ApiResponseTimeStats, type AppTestMode, type ArtifactFile, type ArtifactRunEntry, type ArtifactRunManifest, type ArtifactTestEntry, type AssertionLocation, type AssertionType, type AuthMode, type AuthState, type CIMetadata, type CIProvider, type CapturedCookie, type CapturedNetworkRequest, type CloudConfig, type CloudReporterOptions, type ConsoleLogEntry, type ConsoleLogLevel, type DeviceInfo, type DomChange, type DomChangeKind, type DomStyleChange, ErrorCode, type FailedAssertionSummary, type FailureDiagnostic, type GitMetadata, type LogLevel, type LogSource, type Logger, type LoggerOptions, type MergeOptions, type MobilePlatform, type NavigationAnnotation, type NavigationStep, type NavigationType, type NetworkStats, PAYLOAD_VERSION, PAYLOAD_VERSION_LEGACY, type QueueEntry, type RepoResolution, type ReportMode, type ReporterConfig, type ResourceBreakdown, type ResourceType, type StepAssertion, type StepKind, type StepTestIdentity, type StreamingFileStats, type StreamingReportManifest, type StreamingReportSummary, type StreamingValidation, type StreamingWriteError, type Summary, type TestArtifacts, type TestDetailData, type TestIndexEntry, type TestRelicDataPayload, TestRelicError, type TestRelicFilePayload, type TestResult, type TestRunReport, type TestStatus, type TestType, type TimelineEntry, type TimelineStep, type UploadStrategy, type VisualComparison, type VisualSource, type VisualStatus, createError, createLogger, isTestRelicDataPayload, isTestRelicFilePayload, isValidApiKeyFormat, isValidCloudConfig, isValidConfig, isValidEndpointUrl, isValidNavigationType, isValidQueueEntry, isValidTestRunReport, isValidUploadStrategy };