@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,274 @@
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 RpcServerMessage = RpcResponseSchema | RpcServerNotification;
6
+ export type RpcResponseSchema = RpcSuccessSchema | RpcFailureSchema;
7
+ export type RpcIdSchema = string | number;
8
+ export type JsonRpcVersion = "2.0";
9
+ export type NullableRpcIdSchema = RpcIdSchema | null;
10
+ export type RpcServerNotification = EventsStreamEventNotification | EventsStreamTerminalNotification;
11
+ export type EventsStreamEventMethod = "events.stream.event";
12
+ /**
13
+ * A one-based sequence number within one session.
14
+ *
15
+ * The wire value is capped at JavaScript's maximum safe integer so generated
16
+ * clients can sort and resume event streams without losing precision.
17
+ */
18
+ export type EventSequence = number;
19
+ /**
20
+ * Identifies one daemon process lifetime. A cursor from another epoch must
21
+ * never be accepted as a resumable position.
22
+ */
23
+ export type EventStreamEpoch = string;
24
+ export type TestEventPayload = {
25
+ type: "sessionStarted";
26
+ } | {
27
+ outcome: SessionOutcome;
28
+ reason?: string | null;
29
+ type: "sessionEnded";
30
+ } | {
31
+ observation: Observation;
32
+ type: "observationCaptured";
33
+ } | {
34
+ call: RecordedActionCall;
35
+ type: "actionStarted";
36
+ } | {
37
+ callId: string;
38
+ outcome: ActionOutcome;
39
+ type: "actionCompleted";
40
+ } | {
41
+ stream: MediaStreamInfo;
42
+ type: "mediaStreamStarted";
43
+ } | {
44
+ frame: MediaFrame;
45
+ type: "mediaFrameCaptured";
46
+ } | {
47
+ frameCount: number;
48
+ streamId: string;
49
+ type: "mediaStreamEnded";
50
+ } | {
51
+ type: "verdictRecorded";
52
+ verdict: Verdict;
53
+ } | {
54
+ error: ErrorInfo;
55
+ type: "error";
56
+ };
57
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
58
+ export type ScreenshotOmissionReason = "policy" | "protectedAction";
59
+ export type UiContextKind = "native" | "web";
60
+ export type UiSnapshotOmissionReason = "driverUnsupported" | "policy" | "protectedAction";
61
+ /**
62
+ * The terminal outcome for one action call.
63
+ *
64
+ * Keeping the four outcomes structurally distinct prevents clients from
65
+ * having to infer timeout or cancellation from human-readable error text.
66
+ */
67
+ export type ActionOutcome = {
68
+ outcome: "succeeded";
69
+ result: ActionResult;
70
+ } | {
71
+ error: ErrorInfo;
72
+ outcome: "failed";
73
+ } | {
74
+ error: ErrorInfo;
75
+ outcome: "cancelled";
76
+ } | {
77
+ error: ErrorInfo;
78
+ outcome: "timedOut";
79
+ timeoutMs: number;
80
+ };
81
+ export type ActionExecution = {
82
+ context: UiContextRef;
83
+ mode: "nativeSemantic";
84
+ } | {
85
+ context: UiContextRef;
86
+ mode: "webSemantic";
87
+ } | {
88
+ context: UiContextRef;
89
+ fallbackReason: CoordinateFallbackReason;
90
+ mode: "coordinateFallback";
91
+ };
92
+ export type CoordinateFallbackReason = "semanticInteractionUnavailable" | "platformLimitation";
93
+ export type MediaStreamKind = "screenshot" | "video";
94
+ export type VerdictStatus = "pass" | "fail" | "unknown";
95
+ export type EventsStreamTerminalMethod = "events.stream.terminal";
96
+ /**
97
+ * The terminal reason is a closed tagged union so reason/error combinations
98
+ * cannot become ambiguous on the wire.
99
+ */
100
+ export type EventsStreamTermination = {
101
+ reason: "sessionEnded";
102
+ } | {
103
+ reason: "cancelled";
104
+ } | {
105
+ error: ErrorInfo;
106
+ reason: "slowConsumer";
107
+ } | {
108
+ error: ErrorInfo;
109
+ reason: "sessionDeleted";
110
+ } | {
111
+ error: ErrorInfo;
112
+ reason: "serverShutdown";
113
+ } | {
114
+ error: ErrorInfo;
115
+ reason: "sequenceGap";
116
+ } | {
117
+ error: ErrorInfo;
118
+ reason: "eventTooLarge";
119
+ } | {
120
+ error: ErrorInfo;
121
+ reason: "internalError";
122
+ };
123
+ export interface RpcSuccessSchema {
124
+ id: RpcIdSchema;
125
+ jsonrpc: JsonRpcVersion;
126
+ result: unknown;
127
+ }
128
+ export interface RpcFailureSchema {
129
+ error: RpcError;
130
+ id: NullableRpcIdSchema;
131
+ jsonrpc: JsonRpcVersion;
132
+ }
133
+ export interface RpcError {
134
+ code: number;
135
+ data: ErrorInfo;
136
+ message: string;
137
+ }
138
+ export interface ErrorInfo {
139
+ code: string;
140
+ details?: unknown;
141
+ message: string;
142
+ retryable: boolean;
143
+ }
144
+ export interface EventsStreamEventNotification {
145
+ jsonrpc: JsonRpcVersion;
146
+ method: EventsStreamEventMethod;
147
+ params: EventsStreamEventParams;
148
+ }
149
+ export interface EventsStreamEventParams {
150
+ cursor: EventStreamCursor;
151
+ event: TestEvent;
152
+ subscriptionId: string;
153
+ }
154
+ /**
155
+ * A Session-scoped, daemon-epoch-scoped application acknowledgement.
156
+ */
157
+ export interface EventStreamCursor {
158
+ sequence: EventSequence;
159
+ sessionId: string;
160
+ streamEpoch: EventStreamEpoch;
161
+ }
162
+ export interface TestEvent {
163
+ atMs: number;
164
+ deviceId?: string | null;
165
+ eventId: string;
166
+ payload: TestEventPayload;
167
+ requestId?: RpcIdSchema | null;
168
+ sequence: EventSequence;
169
+ sessionId: string;
170
+ }
171
+ export interface Observation {
172
+ capturedAtMs: number;
173
+ deviceId: string;
174
+ id: string;
175
+ metadata?: {
176
+ [k: string]: unknown;
177
+ };
178
+ screenshot?: AssetRef | null;
179
+ screenshotOmission?: ScreenshotOmissionReason | null;
180
+ uiSnapshot?: UiSnapshotRef | null;
181
+ uiSnapshotOmission?: UiSnapshotOmissionReason | null;
182
+ viewport: Viewport;
183
+ [k: string]: unknown;
184
+ }
185
+ export interface AssetRef {
186
+ id: string;
187
+ mediaType: string;
188
+ sha256?: string | null;
189
+ uri: string;
190
+ [k: string]: unknown;
191
+ }
192
+ /**
193
+ * Small Observation-side reference to a UI Tree Evidence object.
194
+ */
195
+ export interface UiSnapshotRef {
196
+ byteLength: number;
197
+ context: UiContextRef;
198
+ evidence: AssetRef;
199
+ formatVersion: number;
200
+ nodeCount: number;
201
+ }
202
+ /**
203
+ * Full identity of one native accessibility or web-document context.
204
+ * `documentEpoch` is required for both channels and changes after reconnect,
205
+ * navigation, or any replacement that invalidates prior node references.
206
+ */
207
+ export interface UiContextRef {
208
+ contextId: string;
209
+ contextKind: UiContextKind;
210
+ documentEpoch: string;
211
+ }
212
+ export interface Viewport {
213
+ height: number;
214
+ scaleFactor: number;
215
+ width: number;
216
+ [k: string]: unknown;
217
+ }
218
+ /**
219
+ * Durable representation of an Action invocation.
220
+ *
221
+ * Standard calls preserve the historical wire shape. Protected and unknown
222
+ * calls retain only correlation fields and serialize `arguments` as `null`
223
+ * with an explicit `argumentsRedacted` marker.
224
+ */
225
+ export interface RecordedActionCall {
226
+ arguments?: unknown;
227
+ argumentsRedacted?: boolean;
228
+ id: string;
229
+ name: string;
230
+ [k: string]: unknown;
231
+ }
232
+ export interface ActionResult {
233
+ after?: Observation | null;
234
+ before?: Observation | null;
235
+ callId: string;
236
+ evidence?: AssetRef[];
237
+ execution?: ActionExecution | null;
238
+ finishedAtMs: number;
239
+ output: unknown;
240
+ startedAtMs: number;
241
+ [k: string]: unknown;
242
+ }
243
+ export interface MediaStreamInfo {
244
+ id: string;
245
+ kind: MediaStreamKind;
246
+ mediaType: string;
247
+ viewport?: Viewport | null;
248
+ }
249
+ export interface MediaFrame {
250
+ durationMs?: number | null;
251
+ evidence: AssetRef;
252
+ frameIndex: EventSequence;
253
+ keyFrame?: boolean;
254
+ streamId: string;
255
+ }
256
+ export interface Verdict {
257
+ /**
258
+ * @maxItems 64
259
+ */
260
+ evidence?: AssetRef[];
261
+ status: VerdictStatus;
262
+ summary: string;
263
+ }
264
+ export interface EventsStreamTerminalNotification {
265
+ jsonrpc: JsonRpcVersion;
266
+ method: EventsStreamTerminalMethod;
267
+ params: EventsStreamTerminalParams;
268
+ }
269
+ export interface EventsStreamTerminalParams {
270
+ lastEmittedCursor?: EventStreamCursor | null;
271
+ sessionId: string;
272
+ subscriptionId: string;
273
+ termination: EventsStreamTermination;
274
+ }
@@ -0,0 +1,256 @@
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 RpcServerNotification = EventsStreamEventNotification | EventsStreamTerminalNotification;
6
+ export type JsonRpcVersion = "2.0";
7
+ export type EventsStreamEventMethod = "events.stream.event";
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
+ /**
16
+ * Identifies one daemon process lifetime. A cursor from another epoch must
17
+ * never be accepted as a resumable position.
18
+ */
19
+ export type EventStreamEpoch = string;
20
+ export type TestEventPayload = {
21
+ type: "sessionStarted";
22
+ } | {
23
+ outcome: SessionOutcome;
24
+ reason?: string | null;
25
+ type: "sessionEnded";
26
+ } | {
27
+ observation: Observation;
28
+ type: "observationCaptured";
29
+ } | {
30
+ call: RecordedActionCall;
31
+ type: "actionStarted";
32
+ } | {
33
+ callId: string;
34
+ outcome: ActionOutcome;
35
+ type: "actionCompleted";
36
+ } | {
37
+ stream: MediaStreamInfo;
38
+ type: "mediaStreamStarted";
39
+ } | {
40
+ frame: MediaFrame;
41
+ type: "mediaFrameCaptured";
42
+ } | {
43
+ frameCount: number;
44
+ streamId: string;
45
+ type: "mediaStreamEnded";
46
+ } | {
47
+ type: "verdictRecorded";
48
+ verdict: Verdict;
49
+ } | {
50
+ error: ErrorInfo;
51
+ type: "error";
52
+ };
53
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
54
+ export type ScreenshotOmissionReason = "policy" | "protectedAction";
55
+ export type UiContextKind = "native" | "web";
56
+ export type UiSnapshotOmissionReason = "driverUnsupported" | "policy" | "protectedAction";
57
+ /**
58
+ * The terminal outcome for one action call.
59
+ *
60
+ * Keeping the four outcomes structurally distinct prevents clients from
61
+ * having to infer timeout or cancellation from human-readable error text.
62
+ */
63
+ export type ActionOutcome = {
64
+ outcome: "succeeded";
65
+ result: ActionResult;
66
+ } | {
67
+ error: ErrorInfo;
68
+ outcome: "failed";
69
+ } | {
70
+ error: ErrorInfo;
71
+ outcome: "cancelled";
72
+ } | {
73
+ error: ErrorInfo;
74
+ outcome: "timedOut";
75
+ timeoutMs: number;
76
+ };
77
+ export type ActionExecution = {
78
+ context: UiContextRef;
79
+ mode: "nativeSemantic";
80
+ } | {
81
+ context: UiContextRef;
82
+ mode: "webSemantic";
83
+ } | {
84
+ context: UiContextRef;
85
+ fallbackReason: CoordinateFallbackReason;
86
+ mode: "coordinateFallback";
87
+ };
88
+ export type CoordinateFallbackReason = "semanticInteractionUnavailable" | "platformLimitation";
89
+ export type MediaStreamKind = "screenshot" | "video";
90
+ export type VerdictStatus = "pass" | "fail" | "unknown";
91
+ export type RpcIdSchema = string | number;
92
+ export type EventsStreamTerminalMethod = "events.stream.terminal";
93
+ /**
94
+ * The terminal reason is a closed tagged union so reason/error combinations
95
+ * cannot become ambiguous on the wire.
96
+ */
97
+ export type EventsStreamTermination = {
98
+ reason: "sessionEnded";
99
+ } | {
100
+ reason: "cancelled";
101
+ } | {
102
+ error: ErrorInfo;
103
+ reason: "slowConsumer";
104
+ } | {
105
+ error: ErrorInfo;
106
+ reason: "sessionDeleted";
107
+ } | {
108
+ error: ErrorInfo;
109
+ reason: "serverShutdown";
110
+ } | {
111
+ error: ErrorInfo;
112
+ reason: "sequenceGap";
113
+ } | {
114
+ error: ErrorInfo;
115
+ reason: "eventTooLarge";
116
+ } | {
117
+ error: ErrorInfo;
118
+ reason: "internalError";
119
+ };
120
+ export interface EventsStreamEventNotification {
121
+ jsonrpc: JsonRpcVersion;
122
+ method: EventsStreamEventMethod;
123
+ params: EventsStreamEventParams;
124
+ }
125
+ export interface EventsStreamEventParams {
126
+ cursor: EventStreamCursor;
127
+ event: TestEvent;
128
+ subscriptionId: string;
129
+ }
130
+ /**
131
+ * A Session-scoped, daemon-epoch-scoped application acknowledgement.
132
+ */
133
+ export interface EventStreamCursor {
134
+ sequence: EventSequence;
135
+ sessionId: string;
136
+ streamEpoch: EventStreamEpoch;
137
+ }
138
+ export interface TestEvent {
139
+ atMs: number;
140
+ deviceId?: string | null;
141
+ eventId: string;
142
+ payload: TestEventPayload;
143
+ requestId?: RpcIdSchema | null;
144
+ sequence: EventSequence;
145
+ sessionId: string;
146
+ }
147
+ export interface Observation {
148
+ capturedAtMs: number;
149
+ deviceId: string;
150
+ id: string;
151
+ metadata?: {
152
+ [k: string]: unknown;
153
+ };
154
+ screenshot?: AssetRef | null;
155
+ screenshotOmission?: ScreenshotOmissionReason | null;
156
+ uiSnapshot?: UiSnapshotRef | null;
157
+ uiSnapshotOmission?: UiSnapshotOmissionReason | null;
158
+ viewport: Viewport;
159
+ [k: string]: unknown;
160
+ }
161
+ export interface AssetRef {
162
+ id: string;
163
+ mediaType: string;
164
+ sha256?: string | null;
165
+ uri: string;
166
+ [k: string]: unknown;
167
+ }
168
+ /**
169
+ * Small Observation-side reference to a UI Tree Evidence object.
170
+ */
171
+ export interface UiSnapshotRef {
172
+ byteLength: number;
173
+ context: UiContextRef;
174
+ evidence: AssetRef;
175
+ formatVersion: number;
176
+ nodeCount: number;
177
+ }
178
+ /**
179
+ * Full identity of one native accessibility or web-document context.
180
+ * `documentEpoch` is required for both channels and changes after reconnect,
181
+ * navigation, or any replacement that invalidates prior node references.
182
+ */
183
+ export interface UiContextRef {
184
+ contextId: string;
185
+ contextKind: UiContextKind;
186
+ documentEpoch: string;
187
+ }
188
+ export interface Viewport {
189
+ height: number;
190
+ scaleFactor: number;
191
+ width: number;
192
+ [k: string]: unknown;
193
+ }
194
+ /**
195
+ * Durable representation of an Action invocation.
196
+ *
197
+ * Standard calls preserve the historical wire shape. Protected and unknown
198
+ * calls retain only correlation fields and serialize `arguments` as `null`
199
+ * with an explicit `argumentsRedacted` marker.
200
+ */
201
+ export interface RecordedActionCall {
202
+ arguments?: unknown;
203
+ argumentsRedacted?: boolean;
204
+ id: string;
205
+ name: string;
206
+ [k: string]: unknown;
207
+ }
208
+ export interface ActionResult {
209
+ after?: Observation | null;
210
+ before?: Observation | null;
211
+ callId: string;
212
+ evidence?: AssetRef[];
213
+ execution?: ActionExecution | null;
214
+ finishedAtMs: number;
215
+ output: unknown;
216
+ startedAtMs: number;
217
+ [k: string]: unknown;
218
+ }
219
+ export interface ErrorInfo {
220
+ code: string;
221
+ details?: unknown;
222
+ message: string;
223
+ retryable: boolean;
224
+ }
225
+ export interface MediaStreamInfo {
226
+ id: string;
227
+ kind: MediaStreamKind;
228
+ mediaType: string;
229
+ viewport?: Viewport | null;
230
+ }
231
+ export interface MediaFrame {
232
+ durationMs?: number | null;
233
+ evidence: AssetRef;
234
+ frameIndex: EventSequence;
235
+ keyFrame?: boolean;
236
+ streamId: string;
237
+ }
238
+ export interface Verdict {
239
+ /**
240
+ * @maxItems 64
241
+ */
242
+ evidence?: AssetRef[];
243
+ status: VerdictStatus;
244
+ summary: string;
245
+ }
246
+ export interface EventsStreamTerminalNotification {
247
+ jsonrpc: JsonRpcVersion;
248
+ method: EventsStreamTerminalMethod;
249
+ params: EventsStreamTerminalParams;
250
+ }
251
+ export interface EventsStreamTerminalParams {
252
+ lastEmittedCursor?: EventStreamCursor | null;
253
+ sessionId: string;
254
+ subscriptionId: string;
255
+ termination: EventsStreamTermination;
256
+ }
@@ -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 ScreenshotOmissionReason = "policy" | "protectedAction";
@@ -0,0 +1,15 @@
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 SessionCurrentMethodSchema = "session.current";
8
+ export type NoParamsSchema = EmptyParamsObjectSchema | [];
9
+ export interface SessionCurrentRequest {
10
+ id: RpcIdSchema;
11
+ jsonrpc: JsonRpcVersion;
12
+ method: SessionCurrentMethodSchema;
13
+ params?: NoParamsSchema;
14
+ }
15
+ export type EmptyParamsObjectSchema = Record<string, never>;
@@ -0,0 +1,35 @@
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 SessionCurrentResponse = SessionCurrentSuccessSchema | SystemHelloFailureSchema;
6
+ export type RpcIdSchema = string | number;
7
+ export type JsonRpcVersion = "2.0";
8
+ export type NullableRpcIdSchema = RpcIdSchema | null;
9
+ export interface SessionCurrentSuccessSchema {
10
+ id: RpcIdSchema;
11
+ jsonrpc: JsonRpcVersion;
12
+ result: SessionCurrentResult;
13
+ }
14
+ /**
15
+ * Result returned by `session.current`.
16
+ */
17
+ export interface SessionCurrentResult {
18
+ sessionId: string;
19
+ }
20
+ export interface SystemHelloFailureSchema {
21
+ error: RpcError;
22
+ id: NullableRpcIdSchema;
23
+ jsonrpc: JsonRpcVersion;
24
+ }
25
+ export interface RpcError {
26
+ code: number;
27
+ data: ErrorInfo;
28
+ message: string;
29
+ }
30
+ export interface ErrorInfo {
31
+ code: string;
32
+ details?: unknown;
33
+ message: string;
34
+ retryable: boolean;
35
+ }
@@ -0,0 +1,10 @@
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
+ * Result returned by `session.current`.
7
+ */
8
+ export interface SessionCurrentResult {
9
+ sessionId: string;
10
+ }
@@ -0,0 +1,12 @@
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 SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
6
+ /**
7
+ * Optional parameters accepted by `session.end`.
8
+ */
9
+ export interface SessionEndParams {
10
+ outcome?: SessionOutcome | null;
11
+ reason?: string | null;
12
+ }
@@ -0,0 +1,21 @@
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 SessionEndMethodSchema = "session.end";
8
+ export type SessionOutcome = "completed" | "failed" | "cancelled" | "shutdown";
9
+ export interface SessionEndRequest {
10
+ id: RpcIdSchema;
11
+ jsonrpc: JsonRpcVersion;
12
+ method: SessionEndMethodSchema;
13
+ params?: SessionEndParams;
14
+ }
15
+ /**
16
+ * Optional parameters accepted by `session.end`.
17
+ */
18
+ export interface SessionEndParams {
19
+ outcome?: SessionOutcome | null;
20
+ reason?: string | null;
21
+ }
@@ -0,0 +1,45 @@
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 SessionEndResponse = SessionEndSuccessSchema | SystemHelloFailureSchema;
6
+ export type RpcIdSchema = string | number;
7
+ export type JsonRpcVersion = "2.0";
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 type SessionState = "active" | "ended";
16
+ export type NullableRpcIdSchema = RpcIdSchema | null;
17
+ export interface SessionEndSuccessSchema {
18
+ id: RpcIdSchema;
19
+ jsonrpc: JsonRpcVersion;
20
+ result: SessionInfo;
21
+ }
22
+ export interface SessionInfo {
23
+ endedAtMs?: number | null;
24
+ eventCount: EventSequence;
25
+ id: string;
26
+ lastSequence: EventSequence;
27
+ startedAtMs: number;
28
+ state: SessionState;
29
+ }
30
+ export interface SystemHelloFailureSchema {
31
+ error: RpcError;
32
+ id: NullableRpcIdSchema;
33
+ jsonrpc: JsonRpcVersion;
34
+ }
35
+ export interface RpcError {
36
+ code: number;
37
+ data: ErrorInfo;
38
+ message: string;
39
+ }
40
+ export interface ErrorInfo {
41
+ code: string;
42
+ details?: unknown;
43
+ message: string;
44
+ retryable: boolean;
45
+ }
@@ -0,0 +1,20 @@
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
+ export type SessionState = "active" | "ended";
13
+ export interface SessionEndResult {
14
+ endedAtMs?: number | null;
15
+ eventCount: EventSequence;
16
+ id: string;
17
+ lastSequence: EventSequence;
18
+ startedAtMs: number;
19
+ state: SessionState;
20
+ }