@devicerail/protocol 0.1.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 (180) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +33 -0
  3. package/dist/generated/v1/action-call.d.ts +10 -0
  4. package/dist/generated/v1/action-definition.d.ts +12 -0
  5. package/dist/generated/v1/action-execution.d.ts +27 -0
  6. package/dist/generated/v1/action-outcome.d.ts +103 -0
  7. package/dist/generated/v1/action-protection.d.ts +5 -0
  8. package/dist/generated/v1/action-result.d.ts +77 -0
  9. package/dist/generated/v1/asset-ref.d.ts +11 -0
  10. package/dist/generated/v1/clear-element-arguments.d.ts +59 -0
  11. package/dist/generated/v1/clear-element-result.d.ts +26 -0
  12. package/dist/generated/v1/coordinate-fallback-reason.d.ts +5 -0
  13. package/dist/generated/v1/device-capabilities-request.d.ts +21 -0
  14. package/dist/generated/v1/device-capabilities-response.d.ts +37 -0
  15. package/dist/generated/v1/device-capabilities-result.d.ts +13 -0
  16. package/dist/generated/v1/device-connect-request.d.ts +21 -0
  17. package/dist/generated/v1/device-connect-response.d.ts +69 -0
  18. package/dist/generated/v1/device-connect-result.d.ts +44 -0
  19. package/dist/generated/v1/device-disconnect-request.d.ts +21 -0
  20. package/dist/generated/v1/device-disconnect-response.d.ts +35 -0
  21. package/dist/generated/v1/device-disconnect-result.d.ts +10 -0
  22. package/dist/generated/v1/device-execute-params.d.ts +23 -0
  23. package/dist/generated/v1/device-execute-request.d.ts +33 -0
  24. package/dist/generated/v1/device-execute-response.d.ts +102 -0
  25. package/dist/generated/v1/device-execute-result.d.ts +77 -0
  26. package/dist/generated/v1/device-id.d.ts +5 -0
  27. package/dist/generated/v1/device-info.d.ts +44 -0
  28. package/dist/generated/v1/device-observe-request.d.ts +21 -0
  29. package/dist/generated/v1/device-observe-response.d.ts +79 -0
  30. package/dist/generated/v1/device-observe-result.d.ts +54 -0
  31. package/dist/generated/v1/device-select-params.d.ts +10 -0
  32. package/dist/generated/v1/device-select-request.d.ts +19 -0
  33. package/dist/generated/v1/device-select-response.d.ts +75 -0
  34. package/dist/generated/v1/device-select-result.d.ts +50 -0
  35. package/dist/generated/v1/devices-list-request.d.ts +15 -0
  36. package/dist/generated/v1/devices-list-response.d.ts +76 -0
  37. package/dist/generated/v1/devices-list-result.d.ts +51 -0
  38. package/dist/generated/v1/element-selector.d.ts +31 -0
  39. package/dist/generated/v1/element-target.d.ts +56 -0
  40. package/dist/generated/v1/error-info.d.ts +10 -0
  41. package/dist/generated/v1/event-id.d.ts +5 -0
  42. package/dist/generated/v1/event-sequence.d.ts +11 -0
  43. package/dist/generated/v1/event-stream-cursor.d.ts +24 -0
  44. package/dist/generated/v1/event-stream-endpoint.d.ts +8 -0
  45. package/dist/generated/v1/event-stream-epoch.d.ts +9 -0
  46. package/dist/generated/v1/event-stream-origin-policy.d.ts +13 -0
  47. package/dist/generated/v1/event-subscription-id.d.ts +5 -0
  48. package/dist/generated/v1/events-clear-request.d.ts +19 -0
  49. package/dist/generated/v1/events-clear-response.d.ts +36 -0
  50. package/dist/generated/v1/events-clear-result.d.ts +11 -0
  51. package/dist/generated/v1/events-list-params.d.ts +19 -0
  52. package/dist/generated/v1/events-list-request.d.ts +28 -0
  53. package/dist/generated/v1/events-list-response.d.ts +209 -0
  54. package/dist/generated/v1/events-list-result.d.ts +192 -0
  55. package/dist/generated/v1/events-stream-event-notification.d.ts +216 -0
  56. package/dist/generated/v1/events-stream-event-params.d.ts +209 -0
  57. package/dist/generated/v1/events-stream-open-params.d.ts +17 -0
  58. package/dist/generated/v1/events-stream-open-request.d.ts +26 -0
  59. package/dist/generated/v1/events-stream-open-response.d.ts +43 -0
  60. package/dist/generated/v1/events-stream-open-result.d.ts +18 -0
  61. package/dist/generated/v1/events-stream-terminal-notification.d.ts +70 -0
  62. package/dist/generated/v1/events-stream-terminal-params.d.ts +63 -0
  63. package/dist/generated/v1/events-stream-termination.d.ts +37 -0
  64. package/dist/generated/v1/events-subscribe-params.d.ts +28 -0
  65. package/dist/generated/v1/events-subscribe-request.d.ts +37 -0
  66. package/dist/generated/v1/events-subscribe-response.d.ts +56 -0
  67. package/dist/generated/v1/events-subscribe-result.d.ts +31 -0
  68. package/dist/generated/v1/feature-offer.d.ts +8 -0
  69. package/dist/generated/v1/feature-selection.d.ts +7 -0
  70. package/dist/generated/v1/find-element-arguments.d.ts +34 -0
  71. package/dist/generated/v1/find-element-result.d.ts +26 -0
  72. package/dist/generated/v1/hello-params.d.ts +35 -0
  73. package/dist/generated/v1/hello-result.d.ts +29 -0
  74. package/dist/generated/v1/index.d.ts +179 -0
  75. package/dist/generated/v1/json-rpc-version.d.ts +5 -0
  76. package/dist/generated/v1/manual-action-arguments.d.ts +11 -0
  77. package/dist/generated/v1/manual-action-step.d.ts +25 -0
  78. package/dist/generated/v1/manual-recording.d.ts +43 -0
  79. package/dist/generated/v1/media-frame.d.ts +25 -0
  80. package/dist/generated/v1/media-stream-capture-params.d.ts +16 -0
  81. package/dist/generated/v1/media-stream-capture-request.d.ts +31 -0
  82. package/dist/generated/v1/media-stream-capture-response.d.ts +56 -0
  83. package/dist/generated/v1/media-stream-capture-result.d.ts +31 -0
  84. package/dist/generated/v1/media-stream-end-params.d.ts +10 -0
  85. package/dist/generated/v1/media-stream-end-request.d.ts +19 -0
  86. package/dist/generated/v1/media-stream-end-response.d.ts +36 -0
  87. package/dist/generated/v1/media-stream-end-result.d.ts +11 -0
  88. package/dist/generated/v1/media-stream-id.d.ts +5 -0
  89. package/dist/generated/v1/media-stream-info.d.ts +17 -0
  90. package/dist/generated/v1/media-stream-kind.d.ts +5 -0
  91. package/dist/generated/v1/media-stream-start-params.d.ts +17 -0
  92. package/dist/generated/v1/media-stream-start-request.d.ts +26 -0
  93. package/dist/generated/v1/media-stream-start-response.d.ts +48 -0
  94. package/dist/generated/v1/media-stream-start-result.d.ts +23 -0
  95. package/dist/generated/v1/method-map.d.ts +162 -0
  96. package/dist/generated/v1/observation.d.ts +54 -0
  97. package/dist/generated/v1/peer-info.d.ts +8 -0
  98. package/dist/generated/v1/platform.d.ts +36 -0
  99. package/dist/generated/v1/protocol-incompatibility-reason.d.ts +5 -0
  100. package/dist/generated/v1/protocol-offer.d.ts +22 -0
  101. package/dist/generated/v1/protocol-range.d.ts +12 -0
  102. package/dist/generated/v1/protocol-selection.d.ts +11 -0
  103. package/dist/generated/v1/protocol-version.d.ts +8 -0
  104. package/dist/generated/v1/recorded-action-call.d.ts +18 -0
  105. package/dist/generated/v1/request-cancel-params.d.ts +8 -0
  106. package/dist/generated/v1/request-cancel-request.d.ts +16 -0
  107. package/dist/generated/v1/request-cancel-response.d.ts +34 -0
  108. package/dist/generated/v1/request-cancel-result.d.ts +10 -0
  109. package/dist/generated/v1/request-cancel-status.d.ts +5 -0
  110. package/dist/generated/v1/request-timeout-ms.d.ts +9 -0
  111. package/dist/generated/v1/rpc-error.d.ts +15 -0
  112. package/dist/generated/v1/rpc-id.d.ts +5 -0
  113. package/dist/generated/v1/rpc-params.d.ts +7 -0
  114. package/dist/generated/v1/rpc-request.d.ts +21 -0
  115. package/dist/generated/v1/rpc-response.d.ts +29 -0
  116. package/dist/generated/v1/rpc-server-message.d.ts +274 -0
  117. package/dist/generated/v1/rpc-server-notification.d.ts +256 -0
  118. package/dist/generated/v1/screenshot-omission-reason.d.ts +5 -0
  119. package/dist/generated/v1/session-current-request.d.ts +15 -0
  120. package/dist/generated/v1/session-current-response.d.ts +35 -0
  121. package/dist/generated/v1/session-current-result.d.ts +10 -0
  122. package/dist/generated/v1/session-end-params.d.ts +12 -0
  123. package/dist/generated/v1/session-end-request.d.ts +21 -0
  124. package/dist/generated/v1/session-end-response.d.ts +45 -0
  125. package/dist/generated/v1/session-end-result.d.ts +20 -0
  126. package/dist/generated/v1/session-export-params.d.ts +23 -0
  127. package/dist/generated/v1/session-export-request.d.ts +32 -0
  128. package/dist/generated/v1/session-export-response.d.ts +229 -0
  129. package/dist/generated/v1/session-export-result.d.ts +211 -0
  130. package/dist/generated/v1/session-export.d.ts +204 -0
  131. package/dist/generated/v1/session-id.d.ts +5 -0
  132. package/dist/generated/v1/session-info.d.ts +20 -0
  133. package/dist/generated/v1/session-outcome.d.ts +5 -0
  134. package/dist/generated/v1/session-start-request.d.ts +15 -0
  135. package/dist/generated/v1/session-start-response.d.ts +45 -0
  136. package/dist/generated/v1/session-start-result.d.ts +20 -0
  137. package/dist/generated/v1/session-state.d.ts +5 -0
  138. package/dist/generated/v1/session-target-params.d.ts +10 -0
  139. package/dist/generated/v1/sessions-list-request.d.ts +15 -0
  140. package/dist/generated/v1/sessions-list-response.d.ts +45 -0
  141. package/dist/generated/v1/sessions-list-result.d.ts +21 -0
  142. package/dist/generated/v1/set-element-value-arguments.d.ts +60 -0
  143. package/dist/generated/v1/set-element-value-result.d.ts +26 -0
  144. package/dist/generated/v1/system-describe-request.d.ts +15 -0
  145. package/dist/generated/v1/system-describe-response.d.ts +63 -0
  146. package/dist/generated/v1/system-describe-result.d.ts +38 -0
  147. package/dist/generated/v1/system-hello-request.d.ts +44 -0
  148. package/dist/generated/v1/system-hello-response.d.ts +54 -0
  149. package/dist/generated/v1/tap-element-arguments.d.ts +59 -0
  150. package/dist/generated/v1/tap-element-result.d.ts +26 -0
  151. package/dist/generated/v1/test-event-payload.d.ts +181 -0
  152. package/dist/generated/v1/test-event.d.ts +191 -0
  153. package/dist/generated/v1/text-match-mode.d.ts +5 -0
  154. package/dist/generated/v1/text-match.d.ts +9 -0
  155. package/dist/generated/v1/transport-info.d.ts +8 -0
  156. package/dist/generated/v1/ui-context-kind.d.ts +5 -0
  157. package/dist/generated/v1/ui-context-ref.d.ts +15 -0
  158. package/dist/generated/v1/ui-context-selector.d.ts +12 -0
  159. package/dist/generated/v1/ui-node-ref.d.ts +23 -0
  160. package/dist/generated/v1/ui-node.d.ts +26 -0
  161. package/dist/generated/v1/ui-rect.d.ts +10 -0
  162. package/dist/generated/v1/ui-snapshot-get-params.d.ts +13 -0
  163. package/dist/generated/v1/ui-snapshot-get-request.d.ts +22 -0
  164. package/dist/generated/v1/ui-snapshot-get-response.d.ts +81 -0
  165. package/dist/generated/v1/ui-snapshot-get-result.d.ts +56 -0
  166. package/dist/generated/v1/ui-snapshot-omission-reason.d.ts +5 -0
  167. package/dist/generated/v1/ui-snapshot-ref.d.ts +32 -0
  168. package/dist/generated/v1/ui-snapshot.d.ts +56 -0
  169. package/dist/generated/v1/verdict-record-params.d.ts +29 -0
  170. package/dist/generated/v1/verdict-record-request.d.ts +38 -0
  171. package/dist/generated/v1/verdict-record-response.d.ts +215 -0
  172. package/dist/generated/v1/verdict-record-result.d.ts +197 -0
  173. package/dist/generated/v1/verdict-status.d.ts +5 -0
  174. package/dist/generated/v1/verdict.d.ts +20 -0
  175. package/dist/generated/v1/viewport.d.ts +10 -0
  176. package/dist/generated/v1/wait-for-element-arguments.d.ts +35 -0
  177. package/dist/generated/v1/wait-for-element-condition.d.ts +5 -0
  178. package/dist/generated/v1/wait-for-element-result.d.ts +29 -0
  179. package/dist/index.d.ts +1 -0
  180. package/package.json +49 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ /**
6
+ * A one-based sequence number within one session.
7
+ *
8
+ * The wire value is capped at JavaScript's maximum safe integer so generated
9
+ * clients can sort and resume event streams without losing precision.
10
+ */
11
+ export type EventSequence = number;
12
+ /**
13
+ * Optional parameters accepted by `session.export`.
14
+ *
15
+ * Omitting both cursor fields preserves the original complete-export
16
+ * behavior. Supplying `limit` requests a bounded page after
17
+ * `afterSequence`; `afterSequence` without `limit` is invalid at dispatch.
18
+ */
19
+ export interface SessionExportParams {
20
+ afterSequence?: EventSequence | null;
21
+ limit?: number | null;
22
+ sessionId?: string | null;
23
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ export type RpcIdSchema = string | number;
6
+ export type JsonRpcVersion = "2.0";
7
+ export type SessionExportMethodSchema = "session.export";
8
+ /**
9
+ * A one-based sequence number within one session.
10
+ *
11
+ * The wire value is capped at JavaScript's maximum safe integer so generated
12
+ * clients can sort and resume event streams without losing precision.
13
+ */
14
+ export type EventSequence = number;
15
+ export interface SessionExportRequest {
16
+ id: RpcIdSchema;
17
+ jsonrpc: JsonRpcVersion;
18
+ method: SessionExportMethodSchema;
19
+ params?: SessionExportParams;
20
+ }
21
+ /**
22
+ * Optional parameters accepted by `session.export`.
23
+ *
24
+ * Omitting both cursor fields preserves the original complete-export
25
+ * behavior. Supplying `limit` requests a bounded page after
26
+ * `afterSequence`; `afterSequence` without `limit` is invalid at dispatch.
27
+ */
28
+ export interface SessionExportParams {
29
+ afterSequence?: EventSequence | null;
30
+ limit?: number | null;
31
+ sessionId?: string | null;
32
+ }
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ export type SessionExportResponse = SessionExportSuccessSchema | SystemHelloFailureSchema;
6
+ export type RpcIdSchema = string | number;
7
+ export type JsonRpcVersion = "2.0";
8
+ export type TestEventPayload = {
9
+ type: "sessionStarted";
10
+ } | {
11
+ outcome: SessionOutcome;
12
+ reason?: string | null;
13
+ type: "sessionEnded";
14
+ } | {
15
+ observation: Observation;
16
+ type: "observationCaptured";
17
+ } | {
18
+ call: RecordedActionCall;
19
+ type: "actionStarted";
20
+ } | {
21
+ callId: string;
22
+ outcome: ActionOutcome;
23
+ type: "actionCompleted";
24
+ } | {
25
+ stream: MediaStreamInfo;
26
+ type: "mediaStreamStarted";
27
+ } | {
28
+ frame: MediaFrame;
29
+ type: "mediaFrameCaptured";
30
+ } | {
31
+ frameCount: number;
32
+ streamId: string;
33
+ type: "mediaStreamEnded";
34
+ } | {
35
+ type: "verdictRecorded";
36
+ verdict: Verdict;
37
+ } | {
38
+ error: ErrorInfo;
39
+ type: "error";
40
+ };
41
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
42
+ export type ScreenshotOmissionReason = "policy" | "protectedAction";
43
+ export type UiContextKind = "native" | "web";
44
+ export type UiSnapshotOmissionReason = "driverUnsupported" | "policy" | "protectedAction";
45
+ /**
46
+ * The terminal outcome for one action call.
47
+ *
48
+ * Keeping the four outcomes structurally distinct prevents clients from
49
+ * having to infer timeout or cancellation from human-readable error text.
50
+ */
51
+ export type ActionOutcome = {
52
+ outcome: "succeeded";
53
+ result: ActionResult;
54
+ } | {
55
+ error: ErrorInfo;
56
+ outcome: "failed";
57
+ } | {
58
+ error: ErrorInfo;
59
+ outcome: "cancelled";
60
+ } | {
61
+ error: ErrorInfo;
62
+ outcome: "timedOut";
63
+ timeoutMs: number;
64
+ };
65
+ export type ActionExecution = {
66
+ context: UiContextRef;
67
+ mode: "nativeSemantic";
68
+ } | {
69
+ context: UiContextRef;
70
+ mode: "webSemantic";
71
+ } | {
72
+ context: UiContextRef;
73
+ fallbackReason: CoordinateFallbackReason;
74
+ mode: "coordinateFallback";
75
+ };
76
+ export type CoordinateFallbackReason = "semanticInteractionUnavailable" | "platformLimitation";
77
+ export type MediaStreamKind = "screenshot" | "video";
78
+ /**
79
+ * A one-based sequence number within one session.
80
+ *
81
+ * The wire value is capped at JavaScript's maximum safe integer so generated
82
+ * clients can sort and resume event streams without losing precision.
83
+ */
84
+ export type EventSequence = number;
85
+ export type VerdictStatus = "pass" | "fail" | "unknown";
86
+ export type SessionState = "active" | "ended";
87
+ export type NullableRpcIdSchema = RpcIdSchema | null;
88
+ export interface SessionExportSuccessSchema {
89
+ id: RpcIdSchema;
90
+ jsonrpc: JsonRpcVersion;
91
+ result: SessionExportResult;
92
+ }
93
+ /**
94
+ * Result returned by `session.export`.
95
+ *
96
+ * `nextAfterSequence` is absent for a legacy complete export and for the
97
+ * final page. A paged response includes it only when another page remains.
98
+ */
99
+ export interface SessionExportResult {
100
+ events: TestEvent[];
101
+ nextAfterSequence?: EventSequence | null;
102
+ session: SessionInfo;
103
+ }
104
+ export interface TestEvent {
105
+ atMs: number;
106
+ deviceId?: string | null;
107
+ eventId: string;
108
+ payload: TestEventPayload;
109
+ requestId?: RpcIdSchema | null;
110
+ sequence: EventSequence;
111
+ sessionId: string;
112
+ }
113
+ export interface Observation {
114
+ capturedAtMs: number;
115
+ deviceId: string;
116
+ id: string;
117
+ metadata?: {
118
+ [k: string]: unknown;
119
+ };
120
+ screenshot?: AssetRef | null;
121
+ screenshotOmission?: ScreenshotOmissionReason | null;
122
+ uiSnapshot?: UiSnapshotRef | null;
123
+ uiSnapshotOmission?: UiSnapshotOmissionReason | null;
124
+ viewport: Viewport;
125
+ [k: string]: unknown;
126
+ }
127
+ export interface AssetRef {
128
+ id: string;
129
+ mediaType: string;
130
+ sha256?: string | null;
131
+ uri: string;
132
+ [k: string]: unknown;
133
+ }
134
+ /**
135
+ * Small Observation-side reference to a UI Tree Evidence object.
136
+ */
137
+ export interface UiSnapshotRef {
138
+ byteLength: number;
139
+ context: UiContextRef;
140
+ evidence: AssetRef;
141
+ formatVersion: number;
142
+ nodeCount: number;
143
+ }
144
+ /**
145
+ * Full identity of one native accessibility or web-document context.
146
+ * `documentEpoch` is required for both channels and changes after reconnect,
147
+ * navigation, or any replacement that invalidates prior node references.
148
+ */
149
+ export interface UiContextRef {
150
+ contextId: string;
151
+ contextKind: UiContextKind;
152
+ documentEpoch: string;
153
+ }
154
+ export interface Viewport {
155
+ height: number;
156
+ scaleFactor: number;
157
+ width: number;
158
+ [k: string]: unknown;
159
+ }
160
+ /**
161
+ * Durable representation of an Action invocation.
162
+ *
163
+ * Standard calls preserve the historical wire shape. Protected and unknown
164
+ * calls retain only correlation fields and serialize `arguments` as `null`
165
+ * with an explicit `argumentsRedacted` marker.
166
+ */
167
+ export interface RecordedActionCall {
168
+ arguments?: unknown;
169
+ argumentsRedacted?: boolean;
170
+ id: string;
171
+ name: string;
172
+ [k: string]: unknown;
173
+ }
174
+ export interface ActionResult {
175
+ after?: Observation | null;
176
+ before?: Observation | null;
177
+ callId: string;
178
+ evidence?: AssetRef[];
179
+ execution?: ActionExecution | null;
180
+ finishedAtMs: number;
181
+ output: unknown;
182
+ startedAtMs: number;
183
+ [k: string]: unknown;
184
+ }
185
+ export interface ErrorInfo {
186
+ code: string;
187
+ details?: unknown;
188
+ message: string;
189
+ retryable: boolean;
190
+ }
191
+ export interface MediaStreamInfo {
192
+ id: string;
193
+ kind: MediaStreamKind;
194
+ mediaType: string;
195
+ viewport?: Viewport | null;
196
+ }
197
+ export interface MediaFrame {
198
+ durationMs?: number | null;
199
+ evidence: AssetRef;
200
+ frameIndex: EventSequence;
201
+ keyFrame?: boolean;
202
+ streamId: string;
203
+ }
204
+ export interface Verdict {
205
+ /**
206
+ * @maxItems 64
207
+ */
208
+ evidence?: AssetRef[];
209
+ status: VerdictStatus;
210
+ summary: string;
211
+ }
212
+ export interface SessionInfo {
213
+ endedAtMs?: number | null;
214
+ eventCount: EventSequence;
215
+ id: string;
216
+ lastSequence: EventSequence;
217
+ startedAtMs: number;
218
+ state: SessionState;
219
+ }
220
+ export interface SystemHelloFailureSchema {
221
+ error: RpcError;
222
+ id: NullableRpcIdSchema;
223
+ jsonrpc: JsonRpcVersion;
224
+ }
225
+ export interface RpcError {
226
+ code: number;
227
+ data: ErrorInfo;
228
+ message: string;
229
+ }
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ export type TestEventPayload = {
6
+ type: "sessionStarted";
7
+ } | {
8
+ outcome: SessionOutcome;
9
+ reason?: string | null;
10
+ type: "sessionEnded";
11
+ } | {
12
+ observation: Observation;
13
+ type: "observationCaptured";
14
+ } | {
15
+ call: RecordedActionCall;
16
+ type: "actionStarted";
17
+ } | {
18
+ callId: string;
19
+ outcome: ActionOutcome;
20
+ type: "actionCompleted";
21
+ } | {
22
+ stream: MediaStreamInfo;
23
+ type: "mediaStreamStarted";
24
+ } | {
25
+ frame: MediaFrame;
26
+ type: "mediaFrameCaptured";
27
+ } | {
28
+ frameCount: number;
29
+ streamId: string;
30
+ type: "mediaStreamEnded";
31
+ } | {
32
+ type: "verdictRecorded";
33
+ verdict: Verdict;
34
+ } | {
35
+ error: ErrorInfo;
36
+ type: "error";
37
+ };
38
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
39
+ export type ScreenshotOmissionReason = "policy" | "protectedAction";
40
+ export type UiContextKind = "native" | "web";
41
+ export type UiSnapshotOmissionReason = "driverUnsupported" | "policy" | "protectedAction";
42
+ /**
43
+ * The terminal outcome for one action call.
44
+ *
45
+ * Keeping the four outcomes structurally distinct prevents clients from
46
+ * having to infer timeout or cancellation from human-readable error text.
47
+ */
48
+ export type ActionOutcome = {
49
+ outcome: "succeeded";
50
+ result: ActionResult;
51
+ } | {
52
+ error: ErrorInfo;
53
+ outcome: "failed";
54
+ } | {
55
+ error: ErrorInfo;
56
+ outcome: "cancelled";
57
+ } | {
58
+ error: ErrorInfo;
59
+ outcome: "timedOut";
60
+ timeoutMs: number;
61
+ };
62
+ export type ActionExecution = {
63
+ context: UiContextRef;
64
+ mode: "nativeSemantic";
65
+ } | {
66
+ context: UiContextRef;
67
+ mode: "webSemantic";
68
+ } | {
69
+ context: UiContextRef;
70
+ fallbackReason: CoordinateFallbackReason;
71
+ mode: "coordinateFallback";
72
+ };
73
+ export type CoordinateFallbackReason = "semanticInteractionUnavailable" | "platformLimitation";
74
+ export type MediaStreamKind = "screenshot" | "video";
75
+ /**
76
+ * A one-based sequence number within one session.
77
+ *
78
+ * The wire value is capped at JavaScript's maximum safe integer so generated
79
+ * clients can sort and resume event streams without losing precision.
80
+ */
81
+ export type EventSequence = number;
82
+ export type VerdictStatus = "pass" | "fail" | "unknown";
83
+ export type RpcIdSchema = string | number;
84
+ export type SessionState = "active" | "ended";
85
+ /**
86
+ * Result returned by `session.export`.
87
+ *
88
+ * `nextAfterSequence` is absent for a legacy complete export and for the
89
+ * final page. A paged response includes it only when another page remains.
90
+ */
91
+ export interface SessionExportResult {
92
+ events: TestEvent[];
93
+ nextAfterSequence?: EventSequence | null;
94
+ session: SessionInfo;
95
+ }
96
+ export interface TestEvent {
97
+ atMs: number;
98
+ deviceId?: string | null;
99
+ eventId: string;
100
+ payload: TestEventPayload;
101
+ requestId?: RpcIdSchema | null;
102
+ sequence: EventSequence;
103
+ sessionId: string;
104
+ }
105
+ export interface Observation {
106
+ capturedAtMs: number;
107
+ deviceId: string;
108
+ id: string;
109
+ metadata?: {
110
+ [k: string]: unknown;
111
+ };
112
+ screenshot?: AssetRef | null;
113
+ screenshotOmission?: ScreenshotOmissionReason | null;
114
+ uiSnapshot?: UiSnapshotRef | null;
115
+ uiSnapshotOmission?: UiSnapshotOmissionReason | null;
116
+ viewport: Viewport;
117
+ [k: string]: unknown;
118
+ }
119
+ export interface AssetRef {
120
+ id: string;
121
+ mediaType: string;
122
+ sha256?: string | null;
123
+ uri: string;
124
+ [k: string]: unknown;
125
+ }
126
+ /**
127
+ * Small Observation-side reference to a UI Tree Evidence object.
128
+ */
129
+ export interface UiSnapshotRef {
130
+ byteLength: number;
131
+ context: UiContextRef;
132
+ evidence: AssetRef;
133
+ formatVersion: number;
134
+ nodeCount: number;
135
+ }
136
+ /**
137
+ * Full identity of one native accessibility or web-document context.
138
+ * `documentEpoch` is required for both channels and changes after reconnect,
139
+ * navigation, or any replacement that invalidates prior node references.
140
+ */
141
+ export interface UiContextRef {
142
+ contextId: string;
143
+ contextKind: UiContextKind;
144
+ documentEpoch: string;
145
+ }
146
+ export interface Viewport {
147
+ height: number;
148
+ scaleFactor: number;
149
+ width: number;
150
+ [k: string]: unknown;
151
+ }
152
+ /**
153
+ * Durable representation of an Action invocation.
154
+ *
155
+ * Standard calls preserve the historical wire shape. Protected and unknown
156
+ * calls retain only correlation fields and serialize `arguments` as `null`
157
+ * with an explicit `argumentsRedacted` marker.
158
+ */
159
+ export interface RecordedActionCall {
160
+ arguments?: unknown;
161
+ argumentsRedacted?: boolean;
162
+ id: string;
163
+ name: string;
164
+ [k: string]: unknown;
165
+ }
166
+ export interface ActionResult {
167
+ after?: Observation | null;
168
+ before?: Observation | null;
169
+ callId: string;
170
+ evidence?: AssetRef[];
171
+ execution?: ActionExecution | null;
172
+ finishedAtMs: number;
173
+ output: unknown;
174
+ startedAtMs: number;
175
+ [k: string]: unknown;
176
+ }
177
+ export interface ErrorInfo {
178
+ code: string;
179
+ details?: unknown;
180
+ message: string;
181
+ retryable: boolean;
182
+ }
183
+ export interface MediaStreamInfo {
184
+ id: string;
185
+ kind: MediaStreamKind;
186
+ mediaType: string;
187
+ viewport?: Viewport | null;
188
+ }
189
+ export interface MediaFrame {
190
+ durationMs?: number | null;
191
+ evidence: AssetRef;
192
+ frameIndex: EventSequence;
193
+ keyFrame?: boolean;
194
+ streamId: string;
195
+ }
196
+ export interface Verdict {
197
+ /**
198
+ * @maxItems 64
199
+ */
200
+ evidence?: AssetRef[];
201
+ status: VerdictStatus;
202
+ summary: string;
203
+ }
204
+ export interface SessionInfo {
205
+ endedAtMs?: number | null;
206
+ eventCount: EventSequence;
207
+ id: string;
208
+ lastSequence: EventSequence;
209
+ startedAtMs: number;
210
+ state: SessionState;
211
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ export type TestEventPayload = {
6
+ type: "sessionStarted";
7
+ } | {
8
+ outcome: SessionOutcome;
9
+ reason?: string | null;
10
+ type: "sessionEnded";
11
+ } | {
12
+ observation: Observation;
13
+ type: "observationCaptured";
14
+ } | {
15
+ call: RecordedActionCall;
16
+ type: "actionStarted";
17
+ } | {
18
+ callId: string;
19
+ outcome: ActionOutcome;
20
+ type: "actionCompleted";
21
+ } | {
22
+ stream: MediaStreamInfo;
23
+ type: "mediaStreamStarted";
24
+ } | {
25
+ frame: MediaFrame;
26
+ type: "mediaFrameCaptured";
27
+ } | {
28
+ frameCount: number;
29
+ streamId: string;
30
+ type: "mediaStreamEnded";
31
+ } | {
32
+ type: "verdictRecorded";
33
+ verdict: Verdict;
34
+ } | {
35
+ error: ErrorInfo;
36
+ type: "error";
37
+ };
38
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
39
+ export type ScreenshotOmissionReason = "policy" | "protectedAction";
40
+ export type UiContextKind = "native" | "web";
41
+ export type UiSnapshotOmissionReason = "driverUnsupported" | "policy" | "protectedAction";
42
+ /**
43
+ * The terminal outcome for one action call.
44
+ *
45
+ * Keeping the four outcomes structurally distinct prevents clients from
46
+ * having to infer timeout or cancellation from human-readable error text.
47
+ */
48
+ export type ActionOutcome = {
49
+ outcome: "succeeded";
50
+ result: ActionResult;
51
+ } | {
52
+ error: ErrorInfo;
53
+ outcome: "failed";
54
+ } | {
55
+ error: ErrorInfo;
56
+ outcome: "cancelled";
57
+ } | {
58
+ error: ErrorInfo;
59
+ outcome: "timedOut";
60
+ timeoutMs: number;
61
+ };
62
+ export type ActionExecution = {
63
+ context: UiContextRef;
64
+ mode: "nativeSemantic";
65
+ } | {
66
+ context: UiContextRef;
67
+ mode: "webSemantic";
68
+ } | {
69
+ context: UiContextRef;
70
+ fallbackReason: CoordinateFallbackReason;
71
+ mode: "coordinateFallback";
72
+ };
73
+ export type CoordinateFallbackReason = "semanticInteractionUnavailable" | "platformLimitation";
74
+ export type MediaStreamKind = "screenshot" | "video";
75
+ /**
76
+ * A one-based sequence number within one session.
77
+ *
78
+ * The wire value is capped at JavaScript's maximum safe integer so generated
79
+ * clients can sort and resume event streams without losing precision.
80
+ */
81
+ export type EventSequence = number;
82
+ export type VerdictStatus = "pass" | "fail" | "unknown";
83
+ export type RpcIdSchema = string | number;
84
+ export type SessionState = "active" | "ended";
85
+ export interface SessionExport {
86
+ events: TestEvent[];
87
+ session: SessionInfo;
88
+ }
89
+ export interface TestEvent {
90
+ atMs: number;
91
+ deviceId?: string | null;
92
+ eventId: string;
93
+ payload: TestEventPayload;
94
+ requestId?: RpcIdSchema | null;
95
+ sequence: EventSequence;
96
+ sessionId: string;
97
+ }
98
+ export interface Observation {
99
+ capturedAtMs: number;
100
+ deviceId: string;
101
+ id: string;
102
+ metadata?: {
103
+ [k: string]: unknown;
104
+ };
105
+ screenshot?: AssetRef | null;
106
+ screenshotOmission?: ScreenshotOmissionReason | null;
107
+ uiSnapshot?: UiSnapshotRef | null;
108
+ uiSnapshotOmission?: UiSnapshotOmissionReason | null;
109
+ viewport: Viewport;
110
+ [k: string]: unknown;
111
+ }
112
+ export interface AssetRef {
113
+ id: string;
114
+ mediaType: string;
115
+ sha256?: string | null;
116
+ uri: string;
117
+ [k: string]: unknown;
118
+ }
119
+ /**
120
+ * Small Observation-side reference to a UI Tree Evidence object.
121
+ */
122
+ export interface UiSnapshotRef {
123
+ byteLength: number;
124
+ context: UiContextRef;
125
+ evidence: AssetRef;
126
+ formatVersion: number;
127
+ nodeCount: number;
128
+ }
129
+ /**
130
+ * Full identity of one native accessibility or web-document context.
131
+ * `documentEpoch` is required for both channels and changes after reconnect,
132
+ * navigation, or any replacement that invalidates prior node references.
133
+ */
134
+ export interface UiContextRef {
135
+ contextId: string;
136
+ contextKind: UiContextKind;
137
+ documentEpoch: string;
138
+ }
139
+ export interface Viewport {
140
+ height: number;
141
+ scaleFactor: number;
142
+ width: number;
143
+ [k: string]: unknown;
144
+ }
145
+ /**
146
+ * Durable representation of an Action invocation.
147
+ *
148
+ * Standard calls preserve the historical wire shape. Protected and unknown
149
+ * calls retain only correlation fields and serialize `arguments` as `null`
150
+ * with an explicit `argumentsRedacted` marker.
151
+ */
152
+ export interface RecordedActionCall {
153
+ arguments?: unknown;
154
+ argumentsRedacted?: boolean;
155
+ id: string;
156
+ name: string;
157
+ [k: string]: unknown;
158
+ }
159
+ export interface ActionResult {
160
+ after?: Observation | null;
161
+ before?: Observation | null;
162
+ callId: string;
163
+ evidence?: AssetRef[];
164
+ execution?: ActionExecution | null;
165
+ finishedAtMs: number;
166
+ output: unknown;
167
+ startedAtMs: number;
168
+ [k: string]: unknown;
169
+ }
170
+ export interface ErrorInfo {
171
+ code: string;
172
+ details?: unknown;
173
+ message: string;
174
+ retryable: boolean;
175
+ }
176
+ export interface MediaStreamInfo {
177
+ id: string;
178
+ kind: MediaStreamKind;
179
+ mediaType: string;
180
+ viewport?: Viewport | null;
181
+ }
182
+ export interface MediaFrame {
183
+ durationMs?: number | null;
184
+ evidence: AssetRef;
185
+ frameIndex: EventSequence;
186
+ keyFrame?: boolean;
187
+ streamId: string;
188
+ }
189
+ export interface Verdict {
190
+ /**
191
+ * @maxItems 64
192
+ */
193
+ evidence?: AssetRef[];
194
+ status: VerdictStatus;
195
+ summary: string;
196
+ }
197
+ export interface SessionInfo {
198
+ endedAtMs?: number | null;
199
+ eventCount: EventSequence;
200
+ id: string;
201
+ lastSequence: EventSequence;
202
+ startedAtMs: number;
203
+ state: SessionState;
204
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated from the checked-in DeviceRail JSON Schema. DO NOT EDIT.
3
+ * Run `pnpm protocol:types:generate` from the repository root.
4
+ */
5
+ export type SessionId = string;