@qontinui/shared-types 2.4.0 → 2.5.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.
Files changed (43) hide show
  1. package/dist/scheduler.d.cts +74 -1
  2. package/dist/scheduler.d.ts +74 -1
  3. package/package.json +1 -1
  4. package/src/generated/ChangeTimeline.d.ts +484 -0
  5. package/src/generated/CriterionVerification.d.ts +11 -0
  6. package/src/generated/DetectedAnimation.d.ts +32 -0
  7. package/src/generated/EarsPattern.d.ts +20 -0
  8. package/src/generated/EdgeTiming.d.ts +156 -0
  9. package/src/generated/ExternalRef.d.ts +22 -0
  10. package/src/generated/InterfaceMappingFrontmatter.d.ts +21 -0
  11. package/src/generated/JourneyArrivalDoubt.d.ts +26 -0
  12. package/src/generated/JourneyCoverage.d.ts +91 -0
  13. package/src/generated/JourneyDeadEnds.d.ts +109 -0
  14. package/src/generated/JourneyEdgeObservation.d.ts +3 -2
  15. package/src/generated/JourneyEdgeTimingAnswer.d.ts +88 -0
  16. package/src/generated/JourneyFilter.d.ts +35 -0
  17. package/src/generated/JourneyFrontier.d.ts +51 -0
  18. package/src/generated/JourneyGraph.d.ts +165 -0
  19. package/src/generated/JourneyGraphEdge.d.ts +45 -0
  20. package/src/generated/JourneyPriorKnowledge.d.ts +112 -0
  21. package/src/generated/JourneyReachable.d.ts +64 -0
  22. package/src/generated/JourneySearchFrontier.d.ts +59 -0
  23. package/src/generated/JourneySearchFrontierNode.d.ts +37 -0
  24. package/src/generated/JourneySteps.d.ts +65 -0
  25. package/src/generated/JourneyUnmeasuredDepartures.d.ts +84 -0
  26. package/src/generated/MappingRow.d.ts +23 -0
  27. package/src/generated/MetricDistribution.d.ts +54 -0
  28. package/src/generated/RequestFrontmatter.d.ts +30 -0
  29. package/src/generated/RequirementFrontmatter.d.ts +31 -0
  30. package/src/generated/ScheduledTask.d.ts +52 -0
  31. package/src/generated/ScheduledTaskType.d.ts +22 -1
  32. package/src/generated/SourceCitation.d.ts +25 -0
  33. package/src/generated/SourceCitationKind.d.ts +12 -0
  34. package/src/generated/SpecAcceptanceCriterion.d.ts +28 -0
  35. package/src/generated/SpecFrontmatter.d.ts +36 -0
  36. package/src/generated/SpecLanguage.d.ts +11 -0
  37. package/src/generated/StoryFrontmatter.d.ts +26 -0
  38. package/src/generated/TemplateRef.d.ts +17 -0
  39. package/src/generated/UnknownCode.d.ts +8 -1
  40. package/src/generated/index.ts +32 -3
  41. package/src/generated/CapabilityState.d.ts +0 -25
  42. package/src/generated/CliProfile.d.ts +0 -492
  43. package/src/generated/SessionFailure.d.ts +0 -129
@@ -390,6 +390,21 @@ type ScheduledTaskType =
390
390
  * Empty = use the runner's default tool allow-list.
391
391
  */
392
392
  allowed_tools?: string[];
393
+ /**
394
+ * Optional reasoning-effort level for the spawned session: one of
395
+ * `low`, `medium`, `high`, `xhigh` or `max`. `None` leaves the level
396
+ * to the runner. A plain string rather than an enum, so a stored
397
+ * task carrying a level this crate does not list still loads; the
398
+ * consumer validates it.
399
+ */
400
+ effort?: string | null;
401
+ /**
402
+ * Optional kebab-case name of a spawn-effort profile (e.g.
403
+ * `research`, `implementation`) that the runner resolves to an
404
+ * effort level and an ultracode setting. `None` leaves the choice
405
+ * to the runner.
406
+ */
407
+ effort_profile?: string | null;
393
408
  /**
394
409
  * Hard cap on Claude turns per run (safety bound). `None` =
395
410
  * runner's default cap (typically 50).
@@ -416,6 +431,12 @@ type ScheduledTaskType =
416
431
  * (typically 600s = 10 min).
417
432
  */
418
433
  timeout_seconds?: number | null;
434
+ /**
435
+ * Optional ultracode switch (standing dynamic-workflow orchestration)
436
+ * for the spawned session. `Some(true)` turns it on, `Some(false)`
437
+ * keeps it off, and `None` leaves the choice to the runner.
438
+ */
439
+ ultracode?: boolean | null;
419
440
  /**
420
441
  * Working directory for the spawned session. `None` means the
421
442
  * runner's project root. Stored as a string (not `PathBuf`) to keep
@@ -432,7 +453,7 @@ type ScheduledTaskType =
432
453
  command: string;
433
454
  task_type: "Script";
434
455
  /**
435
- * Wall-clock timeout in seconds. `None` = runner default
456
+ * Wall-clock timeout in seconds. `None` (or 0) = runner default
436
457
  * (600s = 10 min).
437
458
  */
438
459
  timeout_seconds?: number | null;
@@ -579,6 +600,12 @@ interface ScheduledTask {
579
600
  * Default 60s.
580
601
  */
581
602
  launchFailureBackoffSeconds: number;
603
+ /**
604
+ * Set when the task was created by the runner's reconciler from a
605
+ * fleet-wide recurring-agent declaration rather than by a user. `None` =
606
+ * an unmanaged, user-created task, which the reconciler never touches.
607
+ */
608
+ managed?: ManagedBy | null;
582
609
  /**
583
610
  * ISO 8601 timestamp of last modification.
584
611
  */
@@ -607,6 +634,52 @@ interface ScheduledTask {
607
634
  * Task type and its per-type configuration.
608
635
  */
609
636
  task: ScheduledTaskType;
637
+ /**
638
+ * IANA time zone this task's schedule is interpreted in (e.g.
639
+ * `Europe/Berlin`). Takes precedence over the global
640
+ * [`SchedulerSettings::timezone`]; `None` = the scheduler's zone. Lets one
641
+ * fleet-wide declaration mean either "local night on every device" or a
642
+ * fixed instant.
643
+ */
644
+ timezone?: string | null;
645
+ }
646
+ /**
647
+ * Provenance of a [`ScheduledTask`] that the runner reconciles from a
648
+ * fleet-wide declaration (plan
649
+ * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
650
+ *
651
+ * `(source, tenant_id, agent)` is the managed key: the runner holds at most
652
+ * one task per key. What the reconciler compares to decide whether a task is
653
+ * current is `digest`, never `version` — a catalog fix in coord's code moves
654
+ * no row version, and a deleted-and-recreated agent restarts its version at 1.
655
+ */
656
+ interface ManagedBy {
657
+ /**
658
+ * The recurring agent's name — its join key across coord's status, run
659
+ * requests and this managed task (coord forbids renames).
660
+ */
661
+ agent: string;
662
+ /**
663
+ * sha256 (64 lowercase hex) of the resolved spec coord served when this
664
+ * task was applied. `None` = applied from a declaration that carried no
665
+ * digest.
666
+ */
667
+ digest?: string | null;
668
+ /**
669
+ * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
670
+ * A plain string rather than an enum, so a stored task from a newer
671
+ * source still loads; the consumer decides what it recognises.
672
+ */
673
+ source: string;
674
+ /**
675
+ * The coord tenant (UUID) whose declaration this task applies. A device
676
+ * bound to several tenants holds one managed task per tenant and agent.
677
+ */
678
+ tenantId: string;
679
+ /**
680
+ * The declaration's row version when applied. History and display only.
681
+ */
682
+ version: number;
610
683
  }
611
684
 
612
685
  /* eslint-disable */
@@ -390,6 +390,21 @@ type ScheduledTaskType =
390
390
  * Empty = use the runner's default tool allow-list.
391
391
  */
392
392
  allowed_tools?: string[];
393
+ /**
394
+ * Optional reasoning-effort level for the spawned session: one of
395
+ * `low`, `medium`, `high`, `xhigh` or `max`. `None` leaves the level
396
+ * to the runner. A plain string rather than an enum, so a stored
397
+ * task carrying a level this crate does not list still loads; the
398
+ * consumer validates it.
399
+ */
400
+ effort?: string | null;
401
+ /**
402
+ * Optional kebab-case name of a spawn-effort profile (e.g.
403
+ * `research`, `implementation`) that the runner resolves to an
404
+ * effort level and an ultracode setting. `None` leaves the choice
405
+ * to the runner.
406
+ */
407
+ effort_profile?: string | null;
393
408
  /**
394
409
  * Hard cap on Claude turns per run (safety bound). `None` =
395
410
  * runner's default cap (typically 50).
@@ -416,6 +431,12 @@ type ScheduledTaskType =
416
431
  * (typically 600s = 10 min).
417
432
  */
418
433
  timeout_seconds?: number | null;
434
+ /**
435
+ * Optional ultracode switch (standing dynamic-workflow orchestration)
436
+ * for the spawned session. `Some(true)` turns it on, `Some(false)`
437
+ * keeps it off, and `None` leaves the choice to the runner.
438
+ */
439
+ ultracode?: boolean | null;
419
440
  /**
420
441
  * Working directory for the spawned session. `None` means the
421
442
  * runner's project root. Stored as a string (not `PathBuf`) to keep
@@ -432,7 +453,7 @@ type ScheduledTaskType =
432
453
  command: string;
433
454
  task_type: "Script";
434
455
  /**
435
- * Wall-clock timeout in seconds. `None` = runner default
456
+ * Wall-clock timeout in seconds. `None` (or 0) = runner default
436
457
  * (600s = 10 min).
437
458
  */
438
459
  timeout_seconds?: number | null;
@@ -579,6 +600,12 @@ interface ScheduledTask {
579
600
  * Default 60s.
580
601
  */
581
602
  launchFailureBackoffSeconds: number;
603
+ /**
604
+ * Set when the task was created by the runner's reconciler from a
605
+ * fleet-wide recurring-agent declaration rather than by a user. `None` =
606
+ * an unmanaged, user-created task, which the reconciler never touches.
607
+ */
608
+ managed?: ManagedBy | null;
582
609
  /**
583
610
  * ISO 8601 timestamp of last modification.
584
611
  */
@@ -607,6 +634,52 @@ interface ScheduledTask {
607
634
  * Task type and its per-type configuration.
608
635
  */
609
636
  task: ScheduledTaskType;
637
+ /**
638
+ * IANA time zone this task's schedule is interpreted in (e.g.
639
+ * `Europe/Berlin`). Takes precedence over the global
640
+ * [`SchedulerSettings::timezone`]; `None` = the scheduler's zone. Lets one
641
+ * fleet-wide declaration mean either "local night on every device" or a
642
+ * fixed instant.
643
+ */
644
+ timezone?: string | null;
645
+ }
646
+ /**
647
+ * Provenance of a [`ScheduledTask`] that the runner reconciles from a
648
+ * fleet-wide declaration (plan
649
+ * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
650
+ *
651
+ * `(source, tenant_id, agent)` is the managed key: the runner holds at most
652
+ * one task per key. What the reconciler compares to decide whether a task is
653
+ * current is `digest`, never `version` — a catalog fix in coord's code moves
654
+ * no row version, and a deleted-and-recreated agent restarts its version at 1.
655
+ */
656
+ interface ManagedBy {
657
+ /**
658
+ * The recurring agent's name — its join key across coord's status, run
659
+ * requests and this managed task (coord forbids renames).
660
+ */
661
+ agent: string;
662
+ /**
663
+ * sha256 (64 lowercase hex) of the resolved spec coord served when this
664
+ * task was applied. `None` = applied from a declaration that carried no
665
+ * digest.
666
+ */
667
+ digest?: string | null;
668
+ /**
669
+ * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
670
+ * A plain string rather than an enum, so a stored task from a newer
671
+ * source still loads; the consumer decides what it recognises.
672
+ */
673
+ source: string;
674
+ /**
675
+ * The coord tenant (UUID) whose declaration this task applies. A device
676
+ * bound to several tenants holds one managed task per tenant and agent.
677
+ */
678
+ tenantId: string;
679
+ /**
680
+ * The declaration's row version when applied. History and display only.
681
+ */
682
+ version: number;
610
683
  }
611
684
 
612
685
  /* eslint-disable */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qontinui/shared-types",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Shared TypeScript types for the Qontinui ecosystem",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,484 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { CacheProvenance } from "./CacheProvenance";
9
+ import type { DetectedAnimation } from "./DetectedAnimation";
10
+ import type { Observation } from "./Observation";
11
+ import type { ObservationCoverage } from "./ObservationCoverage";
12
+ import type { Producer } from "./Producer";
13
+ import type { Provenance } from "./Provenance";
14
+ import type { UnknownCode } from "./UnknownCode";
15
+ import type { UnknownInfo } from "./UnknownInfo";
16
+ import type { UnmeasuredDimension } from "./UnmeasuredDimension";
17
+
18
+ /**
19
+ * A single event in the interaction timeline, discriminated on `type`.
20
+ */
21
+ export type TimelineEvent =
22
+ | {
23
+ /**
24
+ * Time offset from action start (ms).
25
+ */
26
+ offsetMs: number;
27
+ /**
28
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
29
+ */
30
+ summary: string;
31
+ type: "action";
32
+ [k: string]: unknown;
33
+ }
34
+ | {
35
+ /**
36
+ * Number of elements affected.
37
+ */
38
+ count: number;
39
+ /**
40
+ * Element IDs involved.
41
+ */
42
+ elementIds: string[];
43
+ /**
44
+ * Time offset from action start (ms).
45
+ */
46
+ offsetMs: number;
47
+ /**
48
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
49
+ */
50
+ summary: string;
51
+ type: "elements-appeared";
52
+ [k: string]: unknown;
53
+ }
54
+ | {
55
+ /**
56
+ * Number of elements affected.
57
+ */
58
+ count: number;
59
+ /**
60
+ * Element IDs involved.
61
+ */
62
+ elementIds: string[];
63
+ /**
64
+ * Time offset from action start (ms).
65
+ */
66
+ offsetMs: number;
67
+ /**
68
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
69
+ */
70
+ summary: string;
71
+ type: "elements-disappeared";
72
+ [k: string]: unknown;
73
+ }
74
+ | {
75
+ /**
76
+ * Number of elements affected.
77
+ */
78
+ count: number;
79
+ /**
80
+ * Element IDs involved.
81
+ */
82
+ elementIds: string[];
83
+ /**
84
+ * Time offset from action start (ms).
85
+ */
86
+ offsetMs: number;
87
+ /**
88
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
89
+ */
90
+ summary: string;
91
+ type: "elements-modified";
92
+ [k: string]: unknown;
93
+ }
94
+ | {
95
+ /**
96
+ * Time offset from action start (ms).
97
+ */
98
+ offsetMs: number;
99
+ /**
100
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
101
+ */
102
+ summary: string;
103
+ type: "page-changed";
104
+ /**
105
+ * The new URL, or `null` when the diff did not carry one.
106
+ */
107
+ url?: string | null;
108
+ [k: string]: unknown;
109
+ }
110
+ | {
111
+ /**
112
+ * Time offset from action start (ms).
113
+ */
114
+ offsetMs: number;
115
+ /**
116
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
117
+ */
118
+ summary: string;
119
+ type: "settled";
120
+ [k: string]: unknown;
121
+ }
122
+ | {
123
+ /**
124
+ * The browser's `hadRecentInput` flag for this shift.
125
+ */
126
+ hadRecentInput: boolean;
127
+ /**
128
+ * Time offset from action start (ms).
129
+ */
130
+ offsetMs: number;
131
+ /**
132
+ * How many shifted elements `shiftedFingerprints` named. NOT sent by
133
+ * the SDK: [`ChangeTimeline::for_ledger`] sets it when it empties
134
+ * `shiftedFingerprints`, so a stored timeline keeps the count and
135
+ * not the hashes. Absent on the wire from the SDK.
136
+ */
137
+ shiftedElementCount?: number | null;
138
+ /**
139
+ * `ElementFingerprintData.hash` of each shifted element still in the
140
+ * document.
141
+ */
142
+ shiftedFingerprints: string[];
143
+ /**
144
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
145
+ */
146
+ summary: string;
147
+ type: "layout-shift";
148
+ /**
149
+ * Shift sources whose node was gone (or not an element) when the
150
+ * entry was read.
151
+ */
152
+ unattributedSourceCount: number;
153
+ /**
154
+ * The shift score (Layout Instability API `value`).
155
+ */
156
+ value: number;
157
+ [k: string]: unknown;
158
+ }
159
+ | {
160
+ /**
161
+ * The animation.
162
+ */
163
+ animation: DetectedAnimation;
164
+ /**
165
+ * Time offset from action start (ms).
166
+ */
167
+ offsetMs: number;
168
+ /**
169
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
170
+ */
171
+ summary: string;
172
+ type: "animation-started";
173
+ [k: string]: unknown;
174
+ }
175
+ | {
176
+ /**
177
+ * The animation.
178
+ */
179
+ animation: DetectedAnimation;
180
+ /**
181
+ * Finished or cancelled.
182
+ */
183
+ endReason: "finished" | "cancelled";
184
+ /**
185
+ * Time offset from action start (ms).
186
+ */
187
+ offsetMs: number;
188
+ /**
189
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
190
+ */
191
+ summary: string;
192
+ type: "animation-ended";
193
+ [k: string]: unknown;
194
+ }
195
+ | {
196
+ /**
197
+ * Task duration (ms).
198
+ */
199
+ durationMs: number;
200
+ /**
201
+ * Time offset from action start (ms).
202
+ */
203
+ offsetMs: number;
204
+ /**
205
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
206
+ */
207
+ summary: string;
208
+ type: "long-task";
209
+ [k: string]: unknown;
210
+ }
211
+ | {
212
+ /**
213
+ * The request URL carried a query string (not reported).
214
+ */
215
+ hasQuery: boolean;
216
+ /**
217
+ * HTTP method.
218
+ */
219
+ method: string;
220
+ /**
221
+ * Time offset from action start (ms).
222
+ */
223
+ offsetMs: number;
224
+ /**
225
+ * The tracker's request id, or `null` when the source supplies none.
226
+ */
227
+ requestId?: string | null;
228
+ /**
229
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
230
+ */
231
+ summary: string;
232
+ type: "network-request-started";
233
+ /**
234
+ * Origin + pathname — never the query or fragment. Always a string
235
+ * from the SDK; `null` only in [`ChangeTimeline::for_ledger`]'s
236
+ * projection, when the URL had no valid `scheme://host` origin.
237
+ */
238
+ url?: string | null;
239
+ [k: string]: unknown;
240
+ }
241
+ | {
242
+ /**
243
+ * Request duration as the tracker measured it, or `null` without a
244
+ * response.
245
+ */
246
+ durationMs?: number | null;
247
+ /**
248
+ * The request threw (no HTTP response). An HTTP error status is NOT
249
+ * `errored` — read `statusCode`.
250
+ */
251
+ errored: boolean;
252
+ /**
253
+ * The request URL carried a query string (not reported).
254
+ */
255
+ hasQuery: boolean;
256
+ /**
257
+ * HTTP method.
258
+ */
259
+ method: string;
260
+ /**
261
+ * Time offset from action start (ms).
262
+ */
263
+ offsetMs: number;
264
+ /**
265
+ * The tracker's request id, or `null` when the source supplies none.
266
+ */
267
+ requestId?: string | null;
268
+ /**
269
+ * HTTP status, or `null` when no response arrived.
270
+ */
271
+ statusCode?: number | null;
272
+ /**
273
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
274
+ */
275
+ summary: string;
276
+ type: "network-request-finished";
277
+ /**
278
+ * Origin + pathname — never the query or fragment. Always a string
279
+ * from the SDK; `null` only in [`ChangeTimeline::for_ledger`]'s
280
+ * projection, when the URL had no valid `scheme://host` origin.
281
+ */
282
+ url?: string | null;
283
+ [k: string]: unknown;
284
+ }
285
+ | {
286
+ /**
287
+ * Time offset from action start (ms).
288
+ */
289
+ offsetMs: number;
290
+ /**
291
+ * The declared state id.
292
+ */
293
+ stateId: string;
294
+ /**
295
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
296
+ */
297
+ summary: string;
298
+ type: "state-entered";
299
+ [k: string]: unknown;
300
+ }
301
+ | {
302
+ /**
303
+ * Time offset from action start (ms).
304
+ */
305
+ offsetMs: number;
306
+ /**
307
+ * The declared state id.
308
+ */
309
+ stateId: string;
310
+ /**
311
+ * Human-readable summary (SDK prose — see the module's PRIVACY note).
312
+ */
313
+ summary: string;
314
+ type: "state-exited";
315
+ [k: string]: unknown;
316
+ };
317
+ /**
318
+ * A source of timeline events. A source NOT listed in
319
+ * [`ChangeTimeline::observed_sources`] was not looked at, so the absence of
320
+ * its events means "unknown", never "none".
321
+ */
322
+ export type TimelineSource =
323
+ | "snapshot-poll"
324
+ | "idle-detector"
325
+ | "layout-shift"
326
+ | "long-task"
327
+ | "animation-events"
328
+ | "get-animations"
329
+ | "network"
330
+ | "states";
331
+ /**
332
+ * How an expected state fared inside the caller's `withinMs` window. Exactly
333
+ * one key on the wire.
334
+ */
335
+ export type ExpectedStateOutcome =
336
+ | {
337
+ enteredAtMs: number;
338
+ }
339
+ | {
340
+ notEnteredWithinMs: number;
341
+ }
342
+ | {
343
+ activeThroughoutWithinMs: number;
344
+ };
345
+
346
+ /**
347
+ * The interaction timeline: action → every observed event → settled, each
348
+ * with its offset from the action, plus a derived [`TimelineSummary`].
349
+ */
350
+ export interface ChangeTimeline {
351
+ /**
352
+ * Timestamped events, ordered by `offsetMs` (ties keep arrival order).
353
+ */
354
+ events: TimelineEvent[];
355
+ /**
356
+ * The sources this recording could observe.
357
+ */
358
+ observedSources: TimelineSource[];
359
+ /**
360
+ * How long the timeline was recorded, from action start (ms): the settle
361
+ * window, extended by any `withinMs` window. Not the settle time.
362
+ */
363
+ recordedMs: number;
364
+ /**
365
+ * Whether the UI reached a stable state within `settleTimeout`.
366
+ */
367
+ settled: boolean;
368
+ summary: TimelineSummary;
369
+ [k: string]: unknown;
370
+ }
371
+ /**
372
+ * Values derived from `events`.
373
+ */
374
+ export interface TimelineSummary {
375
+ /**
376
+ * Animations/transitions running when recording ended. Degraded
377
+ * (`coverage.unmeasured`) where `document.getAnimations` is missing.
378
+ */
379
+ animationsUnsettledAtEnd:
380
+ | {
381
+ provenance: Provenance;
382
+ status: "measured";
383
+ value: DetectedAnimation[];
384
+ [k: string]: unknown;
385
+ }
386
+ | {
387
+ provenance: Provenance;
388
+ status: "absent";
389
+ [k: string]: unknown;
390
+ }
391
+ | {
392
+ provenance: Provenance;
393
+ status: "unknown";
394
+ unknown: UnknownInfo;
395
+ [k: string]: unknown;
396
+ };
397
+ /**
398
+ * One entry per requested `expectStates` id, in request order; `[]` when
399
+ * none were requested.
400
+ */
401
+ expectedStates: ExpectedStateResult[];
402
+ /**
403
+ * Offset of the first RESPONSE event (elements-*, page-changed,
404
+ * layout-shift, animation-*, state-*). `unknown{no_event_before_timeout}`
405
+ * when nothing responded in the window.
406
+ */
407
+ firstResponseMs: Observation;
408
+ /**
409
+ * Offset of the LAST layout shift minus `firstResponseMs`. `absent` when
410
+ * no shift occurred.
411
+ */
412
+ layoutShiftAfterFirstResponseMs: Observation;
413
+ /**
414
+ * Number of `layout-shift` events. Same unknown rule.
415
+ */
416
+ layoutShiftCount:
417
+ | {
418
+ provenance: Provenance;
419
+ status: "measured";
420
+ value: number;
421
+ [k: string]: unknown;
422
+ }
423
+ | {
424
+ provenance: Provenance;
425
+ status: "absent";
426
+ [k: string]: unknown;
427
+ }
428
+ | {
429
+ provenance: Provenance;
430
+ status: "unknown";
431
+ unknown: UnknownInfo;
432
+ [k: string]: unknown;
433
+ };
434
+ /**
435
+ * Sum of `layout-shift` values in the window.
436
+ * `unknown{performance_observer_unsupported}` where the entry type is
437
+ * missing.
438
+ */
439
+ layoutShiftTotal: Observation;
440
+ /**
441
+ * Sum of `long-task` durations (ms).
442
+ * `unknown{performance_observer_unsupported}` where `longtask` is
443
+ * missing.
444
+ */
445
+ longTaskTotalMs: Observation;
446
+ /**
447
+ * Offset of the `settled` event. `unknown{no_event_before_timeout}` when
448
+ * the UI did not settle within `settleTimeout`.
449
+ */
450
+ settleMs: Observation;
451
+ [k: string]: unknown;
452
+ }
453
+ /**
454
+ * One `expectStates` entry and its answer.
455
+ */
456
+ export interface ExpectedStateResult {
457
+ /**
458
+ * The answer — `unknown{input_missing}` for an undeclared state or no
459
+ * state registry.
460
+ */
461
+ outcome:
462
+ | {
463
+ provenance: Provenance;
464
+ status: "measured";
465
+ value: ExpectedStateOutcome;
466
+ [k: string]: unknown;
467
+ }
468
+ | {
469
+ provenance: Provenance;
470
+ status: "absent";
471
+ [k: string]: unknown;
472
+ }
473
+ | {
474
+ provenance: Provenance;
475
+ status: "unknown";
476
+ unknown: UnknownInfo;
477
+ [k: string]: unknown;
478
+ };
479
+ /**
480
+ * The declared state id the caller asked about.
481
+ */
482
+ stateId: string;
483
+ [k: string]: unknown;
484
+ }