@qawolf/api-contracts 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v1/environment/find.d.ts +1 -1
- package/dist/v1/environment/index.d.ts +2 -2
- package/dist/v1/environment/resource.d.ts +1 -1
- package/dist/v1/environment/update.d.ts +1 -1
- package/dist/v1/index.d.ts +23 -27
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +4 -18
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/run/index.d.ts.map +1 -1
- package/dist/v1/run/index.js +4 -1
- package/dist/v1/run/index.js.map +1 -1
- package/dist/v1/runner/environment.js +1 -1
- package/dist/v1/runner/files.js +1 -1
- package/dist/v1/runner/inspect.d.ts +1 -0
- package/dist/v1/runner/inspect.d.ts.map +1 -1
- package/dist/v1/runner/inspect.js +6 -2
- package/dist/v1/runner/inspect.js.map +1 -1
- package/dist/v1/runner/inspectMobile.d.ts +226 -0
- package/dist/v1/runner/inspectMobile.d.ts.map +1 -0
- package/dist/v1/runner/inspectMobile.js +118 -0
- package/dist/v1/runner/inspectMobile.js.map +1 -0
- package/dist/v1/runner/inspectMobileShapes.d.ts +73 -0
- package/dist/v1/runner/inspectMobileShapes.d.ts.map +1 -0
- package/dist/v1/runner/inspectMobileShapes.js +59 -0
- package/dist/v1/runner/inspectMobileShapes.js.map +1 -0
- package/dist/v1/runner/performAction.d.ts +3 -2
- package/dist/v1/runner/performAction.d.ts.map +1 -1
- package/dist/v1/runner/performAction.js +3 -1
- package/dist/v1/runner/performAction.js.map +1 -1
- package/dist/v1/runner/takeScreenshot.d.ts +2 -2
- package/dist/v1/runner/takeScreenshot.js +1 -1
- package/dist/v1/runner/takeScreenshot.js.map +1 -1
- package/dist/v1/runnerReexports.d.ts +11 -0
- package/dist/v1/runnerReexports.d.ts.map +1 -0
- package/dist/v1/runnerReexports.js +23 -0
- package/dist/v1/runnerReexports.js.map +1 -0
- package/package.json +1 -1
|
@@ -38,9 +38,9 @@ export declare const makeFindEnvironmentsContract: <EnvironmentId extends Public
|
|
|
38
38
|
name: z.ZodString;
|
|
39
39
|
runConcurrencyLimit: z.ZodString;
|
|
40
40
|
status: z.ZodEnum<{
|
|
41
|
+
ready: "ready";
|
|
41
42
|
blocked: "blocked";
|
|
42
43
|
"needs-investigation": "needs-investigation";
|
|
43
|
-
ready: "ready";
|
|
44
44
|
running: "running";
|
|
45
45
|
}>;
|
|
46
46
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -26,9 +26,9 @@ export declare const makeGetEnvironmentContract: <EnvironmentId extends PublicId
|
|
|
26
26
|
name: z.ZodString;
|
|
27
27
|
runConcurrencyLimit: z.ZodString;
|
|
28
28
|
status: z.ZodEnum<{
|
|
29
|
+
ready: "ready";
|
|
29
30
|
blocked: "blocked";
|
|
30
31
|
"needs-investigation": "needs-investigation";
|
|
31
|
-
ready: "ready";
|
|
32
32
|
running: "running";
|
|
33
33
|
}>;
|
|
34
34
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -86,9 +86,9 @@ export declare const makeCreateEnvironmentContract: <EnvironmentId extends Publi
|
|
|
86
86
|
name: z.ZodString;
|
|
87
87
|
runConcurrencyLimit: z.ZodString;
|
|
88
88
|
status: z.ZodEnum<{
|
|
89
|
+
ready: "ready";
|
|
89
90
|
blocked: "blocked";
|
|
90
91
|
"needs-investigation": "needs-investigation";
|
|
91
|
-
ready: "ready";
|
|
92
92
|
running: "running";
|
|
93
93
|
}>;
|
|
94
94
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -21,9 +21,9 @@ export declare const makeEnvironmentResourceSchema: <EnvironmentId extends Publi
|
|
|
21
21
|
name: z.ZodString;
|
|
22
22
|
runConcurrencyLimit: z.ZodString;
|
|
23
23
|
status: z.ZodEnum<{
|
|
24
|
+
ready: "ready";
|
|
24
25
|
blocked: "blocked";
|
|
25
26
|
"needs-investigation": "needs-investigation";
|
|
26
|
-
ready: "ready";
|
|
27
27
|
running: "running";
|
|
28
28
|
}>;
|
|
29
29
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -28,9 +28,9 @@ export declare const makeUpdateEnvironmentContract: <EnvironmentId extends Publi
|
|
|
28
28
|
name: z.ZodString;
|
|
29
29
|
runConcurrencyLimit: z.ZodString;
|
|
30
30
|
status: z.ZodEnum<{
|
|
31
|
+
ready: "ready";
|
|
31
32
|
blocked: "blocked";
|
|
32
33
|
"needs-investigation": "needs-investigation";
|
|
33
|
-
ready: "ready";
|
|
34
34
|
running: "running";
|
|
35
35
|
}>;
|
|
36
36
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
package/dist/v1/index.d.ts
CHANGED
|
@@ -3,15 +3,7 @@ export type { AnyPublicApiContract, PublicApiContract, PublicApiContractKind, }
|
|
|
3
3
|
export { type IdentityResponse, identityResponse } from "./identity/index.js";
|
|
4
4
|
export { type PublicIdSchema, type PublicIdSchemas, defaultIdSchemas, } from "./ids.js";
|
|
5
5
|
export { makeFlowSelectionSchema } from "./run/index.js";
|
|
6
|
-
export
|
|
7
|
-
export { runEnvironmentSchema } from "./runner/environment.js";
|
|
8
|
-
export { isShippableRunFilePath, runFilePathSchema, runPackageJsonPath, shippableRunFileExtensions, } from "./runner/files.js";
|
|
9
|
-
export { type RunnerNameForPublicApi, makeRunnerSchema, runnerIdSchema, runnerNameSchema, } from "./runner/identity.js";
|
|
10
|
-
export { type InspectOnRunnerRequest, inspectRequestSchema, } from "./runner/inspect.js";
|
|
11
|
-
export { type JournalEntry, type JournalStream, type KnownJournalStream, type ReadJournalRequest, type ReadJournalResponse, journalEntrySchema, journalStreamSchema, knownJournalStreams, maxJournalStreamNameLength, readJournalRequestSchema, readJournalResponseSchema, } from "./runner/journal.js";
|
|
12
|
-
export { type RunFiles, maxRunFilesByteLength, maxRunnerRequestEncodedByteLength, runFilesByteLength, runFilesSchema, } from "./runner/payloadSize.js";
|
|
13
|
-
export { maxActionErrorMessageLength } from "./runner/performAction.js";
|
|
14
|
-
export { type RunSelection, runSelectionSchema, } from "./runner/runSelection.js";
|
|
6
|
+
export * from "./runnerReexports.js";
|
|
15
7
|
import type { AnyPublicApiContract } from "./definition.js";
|
|
16
8
|
import { type PublicIdSchema, type PublicIdSchemasOf } from "./ids.js";
|
|
17
9
|
export type PublicApiInput<Api extends AnyPublicApiContract> = z.input<Api["input"]>;
|
|
@@ -66,9 +58,9 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
66
58
|
name: z.ZodString;
|
|
67
59
|
runConcurrencyLimit: z.ZodString;
|
|
68
60
|
status: z.ZodEnum<{
|
|
61
|
+
ready: "ready";
|
|
69
62
|
blocked: "blocked";
|
|
70
63
|
"needs-investigation": "needs-investigation";
|
|
71
|
-
ready: "ready";
|
|
72
64
|
running: "running";
|
|
73
65
|
}>;
|
|
74
66
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -122,9 +114,9 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
122
114
|
name: z.ZodString;
|
|
123
115
|
runConcurrencyLimit: z.ZodString;
|
|
124
116
|
status: z.ZodEnum<{
|
|
117
|
+
ready: "ready";
|
|
125
118
|
blocked: "blocked";
|
|
126
119
|
"needs-investigation": "needs-investigation";
|
|
127
|
-
ready: "ready";
|
|
128
120
|
running: "running";
|
|
129
121
|
}>;
|
|
130
122
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -159,9 +151,9 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
159
151
|
name: z.ZodString;
|
|
160
152
|
runConcurrencyLimit: z.ZodString;
|
|
161
153
|
status: z.ZodEnum<{
|
|
154
|
+
ready: "ready";
|
|
162
155
|
blocked: "blocked";
|
|
163
156
|
"needs-investigation": "needs-investigation";
|
|
164
|
-
ready: "ready";
|
|
165
157
|
running: "running";
|
|
166
158
|
}>;
|
|
167
159
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -236,9 +228,9 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
236
228
|
name: z.ZodString;
|
|
237
229
|
runConcurrencyLimit: z.ZodString;
|
|
238
230
|
status: z.ZodEnum<{
|
|
231
|
+
ready: "ready";
|
|
239
232
|
blocked: "blocked";
|
|
240
233
|
"needs-investigation": "needs-investigation";
|
|
241
|
-
ready: "ready";
|
|
242
234
|
running: "running";
|
|
243
235
|
}>;
|
|
244
236
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -851,6 +843,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
851
843
|
failureReason: z.ZodEnum<{
|
|
852
844
|
"runner-unreachable": "runner-unreachable";
|
|
853
845
|
"nothing-to-inspect": "nothing-to-inspect";
|
|
846
|
+
"runner-is-not-a-browser": "runner-is-not-a-browser";
|
|
854
847
|
}>;
|
|
855
848
|
outcome: z.ZodLiteral<"failure">;
|
|
856
849
|
}, z.core.$strip>], "outcome">;
|
|
@@ -882,7 +875,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
882
875
|
}, z.core.$strip>;
|
|
883
876
|
};
|
|
884
877
|
performAction: {
|
|
885
|
-
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
878
|
+
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
886
879
|
readonly input: z.ZodObject<{
|
|
887
880
|
action: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
888
881
|
button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
|
|
@@ -932,9 +925,10 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
932
925
|
}, z.core.$strip>, z.ZodObject<{
|
|
933
926
|
failureReason: z.ZodEnum<{
|
|
934
927
|
"runner-unreachable": "runner-unreachable";
|
|
935
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
936
928
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
937
929
|
"screen-not-ready": "screen-not-ready";
|
|
930
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
931
|
+
"action-not-supported-on-mobile": "action-not-supported-on-mobile";
|
|
938
932
|
}>;
|
|
939
933
|
outcome: z.ZodLiteral<"failure">;
|
|
940
934
|
}, z.core.$strip>], "failureReason">], "outcome">;
|
|
@@ -955,7 +949,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
955
949
|
payload: z.ZodUnknown;
|
|
956
950
|
recordedAt: z.ZodISODateTime;
|
|
957
951
|
sequence: z.ZodNumber;
|
|
958
|
-
}, z.core.$strip>, z.ZodTransform<import("./
|
|
952
|
+
}, z.core.$strip>, z.ZodTransform<import("./runnerReexports.js").JournalEntry<unknown>, {
|
|
959
953
|
payload: unknown;
|
|
960
954
|
recordedAt: string;
|
|
961
955
|
sequence: number;
|
|
@@ -1033,7 +1027,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
1033
1027
|
}, z.core.$strip>], "outcome">;
|
|
1034
1028
|
};
|
|
1035
1029
|
takeScreenshot: {
|
|
1036
|
-
readonly description: "Take one screenshot of an interactive runner's screen.
|
|
1030
|
+
readonly description: "Take one screenshot of an interactive runner's screen. On a runner with a browser the image is the whole virtual desktop, browser window and all. On a mobile runner it is the device's own screen, re-encoded to JPEG on the pod so this contract reads one image format regardless of runner family. `screen-needs-a-run` if the runner's virtual desktop has never started. Waiting will not change this and retrying is pointless — call `runner.runFlow` with a flow that opens a browser, then ask for the screen again. On a runner image with a browser that has never run anything, any `runner.performAction` also starts the browser itself. Evaluating a snippet does not start the desktop. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may be too busy to answer. Nothing was changed, so retrying is safe; if it persists, launch the runner again.";
|
|
1037
1031
|
readonly input: z.ZodObject<{
|
|
1038
1032
|
id: z.ZodString;
|
|
1039
1033
|
}, z.core.$strip>;
|
|
@@ -1045,9 +1039,9 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
|
|
|
1045
1039
|
}, z.core.$strip>, z.ZodObject<{
|
|
1046
1040
|
failureReason: z.ZodEnum<{
|
|
1047
1041
|
"runner-unreachable": "runner-unreachable";
|
|
1048
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
1049
1042
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
1050
1043
|
"screen-not-ready": "screen-not-ready";
|
|
1044
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
1051
1045
|
}>;
|
|
1052
1046
|
outcome: z.ZodLiteral<"failure">;
|
|
1053
1047
|
}, z.core.$strip>], "outcome">;
|
|
@@ -1147,9 +1141,9 @@ export declare const publicContractsV1: {
|
|
|
1147
1141
|
name: z.ZodString;
|
|
1148
1142
|
runConcurrencyLimit: z.ZodString;
|
|
1149
1143
|
status: z.ZodEnum<{
|
|
1144
|
+
ready: "ready";
|
|
1150
1145
|
blocked: "blocked";
|
|
1151
1146
|
"needs-investigation": "needs-investigation";
|
|
1152
|
-
ready: "ready";
|
|
1153
1147
|
running: "running";
|
|
1154
1148
|
}>;
|
|
1155
1149
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -1203,9 +1197,9 @@ export declare const publicContractsV1: {
|
|
|
1203
1197
|
name: z.ZodString;
|
|
1204
1198
|
runConcurrencyLimit: z.ZodString;
|
|
1205
1199
|
status: z.ZodEnum<{
|
|
1200
|
+
ready: "ready";
|
|
1206
1201
|
blocked: "blocked";
|
|
1207
1202
|
"needs-investigation": "needs-investigation";
|
|
1208
|
-
ready: "ready";
|
|
1209
1203
|
running: "running";
|
|
1210
1204
|
}>;
|
|
1211
1205
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -1240,9 +1234,9 @@ export declare const publicContractsV1: {
|
|
|
1240
1234
|
name: z.ZodString;
|
|
1241
1235
|
runConcurrencyLimit: z.ZodString;
|
|
1242
1236
|
status: z.ZodEnum<{
|
|
1237
|
+
ready: "ready";
|
|
1243
1238
|
blocked: "blocked";
|
|
1244
1239
|
"needs-investigation": "needs-investigation";
|
|
1245
|
-
ready: "ready";
|
|
1246
1240
|
running: "running";
|
|
1247
1241
|
}>;
|
|
1248
1242
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -1317,9 +1311,9 @@ export declare const publicContractsV1: {
|
|
|
1317
1311
|
name: z.ZodString;
|
|
1318
1312
|
runConcurrencyLimit: z.ZodString;
|
|
1319
1313
|
status: z.ZodEnum<{
|
|
1314
|
+
ready: "ready";
|
|
1320
1315
|
blocked: "blocked";
|
|
1321
1316
|
"needs-investigation": "needs-investigation";
|
|
1322
|
-
ready: "ready";
|
|
1323
1317
|
running: "running";
|
|
1324
1318
|
}>;
|
|
1325
1319
|
terminatedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
@@ -1932,6 +1926,7 @@ export declare const publicContractsV1: {
|
|
|
1932
1926
|
failureReason: z.ZodEnum<{
|
|
1933
1927
|
"runner-unreachable": "runner-unreachable";
|
|
1934
1928
|
"nothing-to-inspect": "nothing-to-inspect";
|
|
1929
|
+
"runner-is-not-a-browser": "runner-is-not-a-browser";
|
|
1935
1930
|
}>;
|
|
1936
1931
|
outcome: z.ZodLiteral<"failure">;
|
|
1937
1932
|
}, z.core.$strip>], "outcome">;
|
|
@@ -1963,7 +1958,7 @@ export declare const publicContractsV1: {
|
|
|
1963
1958
|
}, z.core.$strip>;
|
|
1964
1959
|
};
|
|
1965
1960
|
performAction: {
|
|
1966
|
-
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
1961
|
+
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
1967
1962
|
readonly input: z.ZodObject<{
|
|
1968
1963
|
action: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1969
1964
|
button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
|
|
@@ -2013,9 +2008,10 @@ export declare const publicContractsV1: {
|
|
|
2013
2008
|
}, z.core.$strip>, z.ZodObject<{
|
|
2014
2009
|
failureReason: z.ZodEnum<{
|
|
2015
2010
|
"runner-unreachable": "runner-unreachable";
|
|
2016
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
2017
2011
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
2018
2012
|
"screen-not-ready": "screen-not-ready";
|
|
2013
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
2014
|
+
"action-not-supported-on-mobile": "action-not-supported-on-mobile";
|
|
2019
2015
|
}>;
|
|
2020
2016
|
outcome: z.ZodLiteral<"failure">;
|
|
2021
2017
|
}, z.core.$strip>], "failureReason">], "outcome">;
|
|
@@ -2036,7 +2032,7 @@ export declare const publicContractsV1: {
|
|
|
2036
2032
|
payload: z.ZodUnknown;
|
|
2037
2033
|
recordedAt: z.ZodISODateTime;
|
|
2038
2034
|
sequence: z.ZodNumber;
|
|
2039
|
-
}, z.core.$strip>, z.ZodTransform<import("./
|
|
2035
|
+
}, z.core.$strip>, z.ZodTransform<import("./runnerReexports.js").JournalEntry<unknown>, {
|
|
2040
2036
|
payload: unknown;
|
|
2041
2037
|
recordedAt: string;
|
|
2042
2038
|
sequence: number;
|
|
@@ -2114,7 +2110,7 @@ export declare const publicContractsV1: {
|
|
|
2114
2110
|
}, z.core.$strip>], "outcome">;
|
|
2115
2111
|
};
|
|
2116
2112
|
takeScreenshot: {
|
|
2117
|
-
readonly description: "Take one screenshot of an interactive runner's screen.
|
|
2113
|
+
readonly description: "Take one screenshot of an interactive runner's screen. On a runner with a browser the image is the whole virtual desktop, browser window and all. On a mobile runner it is the device's own screen, re-encoded to JPEG on the pod so this contract reads one image format regardless of runner family. `screen-needs-a-run` if the runner's virtual desktop has never started. Waiting will not change this and retrying is pointless — call `runner.runFlow` with a flow that opens a browser, then ask for the screen again. On a runner image with a browser that has never run anything, any `runner.performAction` also starts the browser itself. Evaluating a snippet does not start the desktop. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may be too busy to answer. Nothing was changed, so retrying is safe; if it persists, launch the runner again.";
|
|
2118
2114
|
readonly input: z.ZodObject<{
|
|
2119
2115
|
id: z.ZodString;
|
|
2120
2116
|
}, z.core.$strip>;
|
|
@@ -2126,9 +2122,9 @@ export declare const publicContractsV1: {
|
|
|
2126
2122
|
}, z.core.$strip>, z.ZodObject<{
|
|
2127
2123
|
failureReason: z.ZodEnum<{
|
|
2128
2124
|
"runner-unreachable": "runner-unreachable";
|
|
2129
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
2130
2125
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
2131
2126
|
"screen-not-ready": "screen-not-ready";
|
|
2127
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
2132
2128
|
}>;
|
|
2133
2129
|
outcome: z.ZodLiteral<"failure">;
|
|
2134
2130
|
}, z.core.$strip>], "outcome">;
|
package/dist/v1/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,cAAc,sBAAsB,CAAC;AAGrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAc5D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEvB,MAAM,UAAU,CAAC;AAwBlB,MAAM,MAAM,cAAc,CAAC,GAAG,SAAS,oBAAoB,IAAI,CAAC,CAAC,KAAK,CACpE,GAAG,CAAC,OAAO,CAAC,CACb,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,GAAG,SAAS,oBAAoB,IAAI,CAAC,CAAC,KAAK,CACrE,GAAG,CAAC,QAAQ,CAAC,CACd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,aAAa,SAAS,cAAc,EACpC,MAAM,SAAS,cAAc,EAC7B,KAAK,SAAS,cAAc,EAC5B,YAAY,SAAS,cAAc,GAAG,cAAc,EACpD,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,WAAW,SAAS,cAAc,GAAG,cAAc,EACnD,QAAQ,SAAS,cAAc,GAAG,cAAc,EAEhD,KAAK,iBAAiB,CACpB,aAAa,EACb,MAAM,EACN,KAAK,EACL,YAAY,EACZ,OAAO,EACP,WAAW,EACX,QAAQ,CACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDF,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}
|
package/dist/v1/index.js
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
export { identityResponse } from "./identity/index.js";
|
|
2
2
|
export { defaultIdSchemas, } from "./ids.js";
|
|
3
3
|
export { makeFlowSelectionSchema } from "./run/index.js";
|
|
4
|
-
export
|
|
5
|
-
// Carries the reservation of QA Wolf's own variable names, which the server
|
|
6
|
-
// validates with rather than restating — a second copy of that rule is how the
|
|
7
|
-
// reservation comes to differ from what is actually stamped.
|
|
8
|
-
export { runEnvironmentSchema } from "./runner/environment.js";
|
|
9
|
-
// The travel rule for files bound for a runner: which files travel, how much may
|
|
10
|
-
// travel, and what environment a run may carry. A client needs the predicate and
|
|
11
|
-
// the size bounds to collect and pre-check with; the schemas are also what the
|
|
12
|
-
// server and the runner validate with, so they are shared rather than restated.
|
|
13
|
-
export { isShippableRunFilePath, runFilePathSchema, runPackageJsonPath, shippableRunFileExtensions, } from "./runner/files.js";
|
|
14
|
-
export { makeRunnerSchema, runnerIdSchema, runnerNameSchema, } from "./runner/identity.js";
|
|
15
|
-
export { inspectRequestSchema, } from "./runner/inspect.js";
|
|
16
|
-
// A journal read is answered verbatim by the public API, so its wire shapes are
|
|
17
|
-
// published here and the private journal package imports them from here.
|
|
18
|
-
export { journalEntrySchema, journalStreamSchema, knownJournalStreams, maxJournalStreamNameLength, readJournalRequestSchema, readJournalResponseSchema, } from "./runner/journal.js";
|
|
19
|
-
export { maxRunFilesByteLength, maxRunnerRequestEncodedByteLength, runFilesByteLength, runFilesSchema, } from "./runner/payloadSize.js";
|
|
20
|
-
export { maxActionErrorMessageLength } from "./runner/performAction.js";
|
|
21
|
-
export { runSelectionSchema, } from "./runner/runSelection.js";
|
|
4
|
+
export * from "./runnerReexports.js";
|
|
22
5
|
import { makeAutomateContract } from "./automate/index.js";
|
|
23
6
|
import { makeDeleteEnvironmentVariableContract } from "./environment/deleteVariable.js";
|
|
24
7
|
import { makeFindEnvironmentsContract } from "./environment/find.js";
|
|
@@ -93,6 +76,9 @@ export const makeContractsV1 = (ids) => {
|
|
|
93
76
|
evaluateSnippet: makeEvaluateSnippetOnRunnerContract(),
|
|
94
77
|
importPackage: makeImportPackageOnRunnerContract(),
|
|
95
78
|
inspect: makeInspectOnRunnerContract(),
|
|
79
|
+
// `runner.inspectMobile` (./runner/inspectMobile.js) stays out of this
|
|
80
|
+
// catalog until ARC-556 adds its router endpoint, to avoid tripping
|
|
81
|
+
// apex-backend's contract/router drift check.
|
|
96
82
|
launch: makeLaunchRunnerContract(),
|
|
97
83
|
performAction: makePerformActionOnRunnerContract(),
|
|
98
84
|
readJournal: makeReadRunnerJournalContract(),
|
package/dist/v1/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAGL,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v1/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,eAAO,MAAM,qBAAqB,GAChC,QAAQ,SAAS,cAAc,EAC/B,MAAM,SAAS,cAAc,EAC7B,KAAK,SAAS,cAAc,EAC5B,KAAK;IACL,MAAM,EAAE,QAAQ,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v1/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,eAAO,MAAM,qBAAqB,GAChC,QAAQ,SAAS,cAAc,EAC/B,MAAM,SAAS,cAAc,EAC7B,KAAK,SAAS,cAAc,EAC5B,KAAK;IACL,MAAM,EAAE,QAAQ,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEA,CAAC"}
|
package/dist/v1/run/index.js
CHANGED
|
@@ -10,7 +10,10 @@ export const makeCreateRunContract = (ids) => {
|
|
|
10
10
|
.optional(),
|
|
11
11
|
environmentId: ids.environmentRef,
|
|
12
12
|
environmentVariables: z.record(z.string(), z.string()).optional(),
|
|
13
|
-
ignoreRules: z
|
|
13
|
+
ignoreRules: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.describe("Ignore this team's sequencing rules for this run. By default they are honoured: the flows your selection depends on are added to the run, and flows run in the order the rules require. Set this to run exactly what you selected, in any order.")
|
|
16
|
+
.default(false),
|
|
14
17
|
// Associate a pull request with the run by its number within a
|
|
15
18
|
// repository. A number requires a repository; a repository may be given
|
|
16
19
|
// on its own. The server resolves the internal pull request id,
|
package/dist/v1/run/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAInC,GAKD,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,CAAC;SACZ,MAAM,CAAC;QACN,QAAQ,EAAE,GAAG,CAAC,MAAM;aACjB,QAAQ,CACP,mEAAmE,CACpE;aACA,QAAQ,EAAE;QACb,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjE,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAInC,GAKD,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,CAAC;SACZ,MAAM,CAAC;QACN,QAAQ,EAAE,GAAG,CAAC,MAAM;aACjB,QAAQ,CACP,mEAAmE,CACpE;aACA,QAAQ,EAAE;QACb,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjE,WAAW,EAAE,CAAC;aACX,OAAO,EAAE;aACT,QAAQ,CACP,kPAAkP,CACnP;aACA,OAAO,CAAC,KAAK,CAAC;QACjB,+DAA+D;QAC/D,wEAAwE;QACxE,gEAAgE;QAChE,+BAA+B;QAC/B,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,CAAC,2DAA2D,CAAC;aACrE,QAAQ,EAAE;QACb,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,oDAAoD,CAAC;aAC9D,QAAQ,EAAE;KACd,CAAC;SACD,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CACrB;QACE,aAAa,EAAE,CAAC;aACb,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,MAAM,EAAE,GAAG,CAAC,IAAI;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAClD,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;iBAClC,QAAQ,CACP,mJAAmJ,CACpJ;SACJ,CAAC,CACH;aACA,QAAQ,CACP,oIAAoI,CACrI;QACH,KAAK,EAAE,GAAG,CAAC,GAAG;KACf,EACD,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,CACzD,CAAC;IAEF,OAAO;QACL,WAAW,EACT,oEAAoE;QACtE,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,YAAY;QAClB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -26,7 +26,7 @@ function refusalForRunEnvironmentVariableName(name) {
|
|
|
26
26
|
return `${reservedRunEnvironmentVariableName} is reserved by QA Wolf and set for you.`;
|
|
27
27
|
return undefined;
|
|
28
28
|
}
|
|
29
|
-
const maxRunEnvironmentVariables =
|
|
29
|
+
const maxRunEnvironmentVariables = 200;
|
|
30
30
|
const maxRunEnvironmentValueLength = 8 * 1024;
|
|
31
31
|
/** Bounded on its own, so a large project is never refused for its environment. */
|
|
32
32
|
export const runEnvironmentSchema = z
|
package/dist/v1/runner/files.js
CHANGED
|
@@ -33,7 +33,7 @@ function isShippableRunFilePathSegment(segment) {
|
|
|
33
33
|
return false;
|
|
34
34
|
if (segment.includes("\\"))
|
|
35
35
|
return false;
|
|
36
|
-
//
|
|
36
|
+
// oxlint-disable-next-line no-control-regex -- refusing control characters is the point
|
|
37
37
|
return !/[\u0000-\u001f\u007f]/.test(segment);
|
|
38
38
|
}
|
|
39
39
|
/** The runner installs dependencies itself, so `node_modules` never ships. */
|
|
@@ -35,6 +35,7 @@ export declare const makeInspectOnRunnerContract: () => {
|
|
|
35
35
|
failureReason: z.ZodEnum<{
|
|
36
36
|
"runner-unreachable": "runner-unreachable";
|
|
37
37
|
"nothing-to-inspect": "nothing-to-inspect";
|
|
38
|
+
"runner-is-not-a-browser": "runner-is-not-a-browser";
|
|
38
39
|
}>;
|
|
39
40
|
outcome: z.ZodLiteral<"failure">;
|
|
40
41
|
}, z.core.$strip>], "outcome">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,oBAAoB;;;;;;;;;2BA0B/B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1E,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,oBAAoB;;;;;;;;;2BA0B/B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCvC,CAAC"}
|
|
@@ -45,12 +45,16 @@ export const makeInspectOnRunnerContract = () => {
|
|
|
45
45
|
.string()
|
|
46
46
|
.optional()
|
|
47
47
|
.describe("What the runner said, when it said anything."),
|
|
48
|
-
failureReason: z.enum([
|
|
48
|
+
failureReason: z.enum([
|
|
49
|
+
"nothing-to-inspect",
|
|
50
|
+
"runner-is-not-a-browser",
|
|
51
|
+
"runner-unreachable",
|
|
52
|
+
]),
|
|
49
53
|
outcome: z.literal("failure"),
|
|
50
54
|
}),
|
|
51
55
|
]);
|
|
52
56
|
return {
|
|
53
|
-
description: "Inspect one thing on an interactive runner: an element's HTML, the page's HTML simplified for a model, or a top-level variable's value as JSON. `nothing-to-inspect` means the runner had nothing to answer with: no live page, no element matching the selector, or no variable under that name. A runner cannot tell those apart, so it reports the one reason and puts whatever it did say in `errorMessage`. " +
|
|
57
|
+
description: "Inspect one thing on an interactive runner: an element's HTML, the page's HTML simplified for a model, or a top-level variable's value as JSON. `nothing-to-inspect` means the runner had nothing to answer with: no live page, no element matching the selector, or no variable under that name. A runner cannot tell those apart, so it reports the one reason and puts whatever it did say in `errorMessage`. `runner-is-not-a-browser` on a mobile runner — call `runner.inspectMobile` for its equivalent surface instead. " +
|
|
54
58
|
retryableRunnerUnreachableDescription,
|
|
55
59
|
input,
|
|
56
60
|
kind: "read",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qCAAqC,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;KAChC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;KAC7B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,qBAAqB,CAAC;aAC1B,QAAQ,CAAC,uDAAuD,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;KAC5B,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACzE,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qCAAqC,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;KAChC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;KAC7B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,qBAAqB,CAAC;aAC1B,QAAQ,CAAC,uDAAuD,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;KAC5B,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACzE,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC;gBACpB,oBAAoB;gBACpB,yBAAyB;gBACzB,oBAAoB;aACrB,CAAC;YACF,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,kgBAAkgB;YAClgB,qCAAqC;QACvC,KAAK;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB;QACtB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const inspectMobileRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
|
+
what: z.ZodLiteral<"session">;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
what: z.ZodLiteral<"contexts">;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
context: z.ZodOptional<z.ZodString>;
|
|
8
|
+
what: z.ZodLiteral<"page">;
|
|
9
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10
|
+
by: z.ZodLiteral<"point">;
|
|
11
|
+
context: z.ZodOptional<z.ZodString>;
|
|
12
|
+
what: z.ZodLiteral<"elements">;
|
|
13
|
+
x: z.ZodInt;
|
|
14
|
+
y: z.ZodInt;
|
|
15
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
16
|
+
by: z.ZodLiteral<"text">;
|
|
17
|
+
context: z.ZodOptional<z.ZodString>;
|
|
18
|
+
partial: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
text: z.ZodString;
|
|
20
|
+
what: z.ZodLiteral<"elements">;
|
|
21
|
+
}, z.core.$strip>], "by">], "what">;
|
|
22
|
+
export type InspectMobileRequest = z.infer<typeof inspectMobileRequestSchema>;
|
|
23
|
+
export declare const makeInspectMobileOnRunnerContract: () => {
|
|
24
|
+
readonly description: "Inspect one thing on a mobile interactive runner: the Appium session's status, the WebView contexts available, the current context's page source, or the elements at a point or carrying some text. Mobile only — a browser runner answers `runner-is-not-mobile`; call `runner.inspect` for a browser's equivalent surface instead. `what: \"session\"` always answers with the session's own status rather than `screen-needs-a-run`, since that is the question it exists to answer; the other three request kinds need a live session first and answer the same `screen-needs-a-run` or `screen-not-ready` outcomes `runner.performAction` and `runner.takeScreenshot` use, instead of reading anything when there is none. `screen-needs-a-run` means no Appium session has started on this runner yet — call `runner.runFlow` with a flow that opens one, then inspect again. `screen-not-ready` means the runner's Appium session exists but did not answer this instant, or more than one is somehow live — retry once; if it persists, relaunch the runner. `runner-is-not-mobile` means there is nothing here to inspect, and retrying will never help — launch a `node20WithAndroid` or `node20WithIos` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may be too busy to answer. Nothing was changed, so retrying is safe; if it persists, launch the runner again.";
|
|
25
|
+
readonly input: z.ZodObject<{
|
|
26
|
+
id: z.ZodString;
|
|
27
|
+
request: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
28
|
+
what: z.ZodLiteral<"session">;
|
|
29
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
30
|
+
what: z.ZodLiteral<"contexts">;
|
|
31
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
32
|
+
context: z.ZodOptional<z.ZodString>;
|
|
33
|
+
what: z.ZodLiteral<"page">;
|
|
34
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
35
|
+
by: z.ZodLiteral<"point">;
|
|
36
|
+
context: z.ZodOptional<z.ZodString>;
|
|
37
|
+
what: z.ZodLiteral<"elements">;
|
|
38
|
+
x: z.ZodInt;
|
|
39
|
+
y: z.ZodInt;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
by: z.ZodLiteral<"text">;
|
|
42
|
+
context: z.ZodOptional<z.ZodString>;
|
|
43
|
+
partial: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
text: z.ZodString;
|
|
45
|
+
what: z.ZodLiteral<"elements">;
|
|
46
|
+
}, z.core.$strip>], "by">], "what">;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
readonly kind: "read";
|
|
49
|
+
readonly name: "runner.inspectMobile";
|
|
50
|
+
readonly output: z.ZodDiscriminatedUnion<[z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
51
|
+
outcome: z.ZodLiteral<"success">;
|
|
52
|
+
session: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
53
|
+
deviceName: z.ZodOptional<z.ZodString>;
|
|
54
|
+
platformName: z.ZodString;
|
|
55
|
+
sessionId: z.ZodString;
|
|
56
|
+
type: z.ZodLiteral<"ready">;
|
|
57
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
58
|
+
error: z.ZodString;
|
|
59
|
+
type: z.ZodLiteral<"unreachable">;
|
|
60
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
61
|
+
sessionCount: z.ZodNumber;
|
|
62
|
+
type: z.ZodLiteral<"ambiguous">;
|
|
63
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
64
|
+
type: z.ZodLiteral<"no-session">;
|
|
65
|
+
}, z.core.$strip>], "type">;
|
|
66
|
+
what: z.ZodLiteral<"session">;
|
|
67
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
68
|
+
contexts: z.ZodArray<z.ZodString>;
|
|
69
|
+
current: z.ZodString;
|
|
70
|
+
outcome: z.ZodLiteral<"success">;
|
|
71
|
+
what: z.ZodLiteral<"contexts">;
|
|
72
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
73
|
+
context: z.ZodString;
|
|
74
|
+
orientation: z.ZodEnum<{
|
|
75
|
+
PORTRAIT: "PORTRAIT";
|
|
76
|
+
LANDSCAPE: "LANDSCAPE";
|
|
77
|
+
}>;
|
|
78
|
+
outcome: z.ZodLiteral<"success">;
|
|
79
|
+
pageSource: z.ZodType<{
|
|
80
|
+
selectors: {
|
|
81
|
+
strategy: {
|
|
82
|
+
name: "xpath";
|
|
83
|
+
type: "unique" | "full-path" | "sibling-of" | "parent-of";
|
|
84
|
+
} | {
|
|
85
|
+
name: "ios-predicate";
|
|
86
|
+
} | {
|
|
87
|
+
hostSelector: string;
|
|
88
|
+
innerSelector: string;
|
|
89
|
+
name: "shadow";
|
|
90
|
+
};
|
|
91
|
+
value: string;
|
|
92
|
+
}[];
|
|
93
|
+
tag: string;
|
|
94
|
+
attributes?: {
|
|
95
|
+
bounds?: {
|
|
96
|
+
bottom: number;
|
|
97
|
+
left: number;
|
|
98
|
+
right: number;
|
|
99
|
+
top: number;
|
|
100
|
+
} | undefined;
|
|
101
|
+
rest?: Record<string, string> | undefined;
|
|
102
|
+
} | undefined;
|
|
103
|
+
} & {
|
|
104
|
+
children?: (({
|
|
105
|
+
selectors: {
|
|
106
|
+
strategy: {
|
|
107
|
+
name: "xpath";
|
|
108
|
+
type: "unique" | "full-path" | "sibling-of" | "parent-of";
|
|
109
|
+
} | {
|
|
110
|
+
name: "ios-predicate";
|
|
111
|
+
} | {
|
|
112
|
+
hostSelector: string;
|
|
113
|
+
innerSelector: string;
|
|
114
|
+
name: "shadow";
|
|
115
|
+
};
|
|
116
|
+
value: string;
|
|
117
|
+
}[];
|
|
118
|
+
tag: string;
|
|
119
|
+
attributes?: {
|
|
120
|
+
bounds?: {
|
|
121
|
+
bottom: number;
|
|
122
|
+
left: number;
|
|
123
|
+
right: number;
|
|
124
|
+
top: number;
|
|
125
|
+
} | undefined;
|
|
126
|
+
rest?: Record<string, string> | undefined;
|
|
127
|
+
} | undefined;
|
|
128
|
+
} & /*elided*/ any) | string)[];
|
|
129
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
130
|
+
selectors: {
|
|
131
|
+
strategy: {
|
|
132
|
+
name: "xpath";
|
|
133
|
+
type: "unique" | "full-path" | "sibling-of" | "parent-of";
|
|
134
|
+
} | {
|
|
135
|
+
name: "ios-predicate";
|
|
136
|
+
} | {
|
|
137
|
+
hostSelector: string;
|
|
138
|
+
innerSelector: string;
|
|
139
|
+
name: "shadow";
|
|
140
|
+
};
|
|
141
|
+
value: string;
|
|
142
|
+
}[];
|
|
143
|
+
tag: string;
|
|
144
|
+
attributes?: {
|
|
145
|
+
bounds?: {
|
|
146
|
+
bottom: number;
|
|
147
|
+
left: number;
|
|
148
|
+
right: number;
|
|
149
|
+
top: number;
|
|
150
|
+
} | undefined;
|
|
151
|
+
rest?: Record<string, string> | undefined;
|
|
152
|
+
} | undefined;
|
|
153
|
+
} & {
|
|
154
|
+
children?: (({
|
|
155
|
+
selectors: {
|
|
156
|
+
strategy: {
|
|
157
|
+
name: "xpath";
|
|
158
|
+
type: "unique" | "full-path" | "sibling-of" | "parent-of";
|
|
159
|
+
} | {
|
|
160
|
+
name: "ios-predicate";
|
|
161
|
+
} | {
|
|
162
|
+
hostSelector: string;
|
|
163
|
+
innerSelector: string;
|
|
164
|
+
name: "shadow";
|
|
165
|
+
};
|
|
166
|
+
value: string;
|
|
167
|
+
}[];
|
|
168
|
+
tag: string;
|
|
169
|
+
attributes?: {
|
|
170
|
+
bounds?: {
|
|
171
|
+
bottom: number;
|
|
172
|
+
left: number;
|
|
173
|
+
right: number;
|
|
174
|
+
top: number;
|
|
175
|
+
} | undefined;
|
|
176
|
+
rest?: Record<string, string> | undefined;
|
|
177
|
+
} | undefined;
|
|
178
|
+
} & /*elided*/ any) | string)[];
|
|
179
|
+
}, unknown>>;
|
|
180
|
+
what: z.ZodLiteral<"page">;
|
|
181
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
182
|
+
matches: z.ZodArray<z.ZodObject<{
|
|
183
|
+
attributes: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
184
|
+
bounds: z.ZodOptional<z.ZodObject<{
|
|
185
|
+
bottom: z.ZodNumber;
|
|
186
|
+
left: z.ZodNumber;
|
|
187
|
+
right: z.ZodNumber;
|
|
188
|
+
top: z.ZodNumber;
|
|
189
|
+
}, z.core.$strip>>;
|
|
190
|
+
center: z.ZodOptional<z.ZodObject<{
|
|
191
|
+
x: z.ZodNumber;
|
|
192
|
+
y: z.ZodNumber;
|
|
193
|
+
}, z.core.$strip>>;
|
|
194
|
+
selectors: z.ZodArray<z.ZodObject<{
|
|
195
|
+
strategy: z.ZodUnion<readonly [z.ZodObject<{
|
|
196
|
+
name: z.ZodLiteral<"xpath">;
|
|
197
|
+
type: z.ZodEnum<{
|
|
198
|
+
unique: "unique";
|
|
199
|
+
"full-path": "full-path";
|
|
200
|
+
"sibling-of": "sibling-of";
|
|
201
|
+
"parent-of": "parent-of";
|
|
202
|
+
}>;
|
|
203
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
204
|
+
name: z.ZodLiteral<"ios-predicate">;
|
|
205
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
206
|
+
hostSelector: z.ZodString;
|
|
207
|
+
innerSelector: z.ZodString;
|
|
208
|
+
name: z.ZodLiteral<"shadow">;
|
|
209
|
+
}, z.core.$strip>]>;
|
|
210
|
+
value: z.ZodString;
|
|
211
|
+
}, z.core.$strip>>;
|
|
212
|
+
tag: z.ZodString;
|
|
213
|
+
}, z.core.$strip>>;
|
|
214
|
+
outcome: z.ZodLiteral<"success">;
|
|
215
|
+
what: z.ZodLiteral<"elements">;
|
|
216
|
+
}, z.core.$strip>], "what">, z.ZodObject<{
|
|
217
|
+
failureReason: z.ZodEnum<{
|
|
218
|
+
"runner-unreachable": "runner-unreachable";
|
|
219
|
+
"runner-is-not-mobile": "runner-is-not-mobile";
|
|
220
|
+
"screen-needs-a-run": "screen-needs-a-run";
|
|
221
|
+
"screen-not-ready": "screen-not-ready";
|
|
222
|
+
}>;
|
|
223
|
+
outcome: z.ZodLiteral<"failure">;
|
|
224
|
+
}, z.core.$strip>], "outcome">;
|
|
225
|
+
};
|
|
226
|
+
//# sourceMappingURL=inspectMobile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectMobile.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/inspectMobile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;mCAgDrC,CAAC;AA4CH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B7C,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { runnerIdSchema } from "./identity.js";
|
|
3
|
+
import { elementSchema, orientationSchema, pageSourceNodeSchema, } from "./inspectMobileShapes.js";
|
|
4
|
+
import { makeRunnerFailureSchema } from "./outcome.js";
|
|
5
|
+
import { retryableRunnerUnreachableDescription, runnerUnreachableFailureReason, } from "./unreachable.js";
|
|
6
|
+
/**
|
|
7
|
+
* Mobile-only: `runner.inspect` covers the equivalent browser surface
|
|
8
|
+
* (element HTML, page HTML, a workflow variable). `what` discriminates so a
|
|
9
|
+
* request kind can be added later without a rename.
|
|
10
|
+
*/
|
|
11
|
+
const maxElementTextLength = 500;
|
|
12
|
+
export const inspectMobileRequestSchema = z.discriminatedUnion("what", [
|
|
13
|
+
z.object({
|
|
14
|
+
what: z
|
|
15
|
+
.literal("session")
|
|
16
|
+
.describe("The status of the Appium session driving the device: ready and what it is, or why not."),
|
|
17
|
+
}),
|
|
18
|
+
z.object({
|
|
19
|
+
what: z
|
|
20
|
+
.literal("contexts")
|
|
21
|
+
.describe("The WebView contexts available on the device, and which one is current."),
|
|
22
|
+
}),
|
|
23
|
+
z.object({
|
|
24
|
+
context: z
|
|
25
|
+
.string()
|
|
26
|
+
.min(1)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Read this context instead of whichever is current."),
|
|
29
|
+
what: z
|
|
30
|
+
.literal("page")
|
|
31
|
+
.describe("The page source of the device's current context, as a tree."),
|
|
32
|
+
}),
|
|
33
|
+
z
|
|
34
|
+
.discriminatedUnion("by", [
|
|
35
|
+
z.object({
|
|
36
|
+
by: z.literal("point"),
|
|
37
|
+
context: z.string().min(1).optional(),
|
|
38
|
+
what: z.literal("elements"),
|
|
39
|
+
x: z.int().min(0).describe("Whole pixels on the device's own screen."),
|
|
40
|
+
y: z.int().min(0).describe("Whole pixels on the device's own screen."),
|
|
41
|
+
}),
|
|
42
|
+
z.object({
|
|
43
|
+
by: z.literal("text"),
|
|
44
|
+
context: z.string().min(1).optional(),
|
|
45
|
+
partial: z
|
|
46
|
+
.boolean()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Match text containing this, rather than exactly this."),
|
|
49
|
+
text: z.string().min(1).max(maxElementTextLength),
|
|
50
|
+
what: z.literal("elements"),
|
|
51
|
+
}),
|
|
52
|
+
])
|
|
53
|
+
.describe("Elements at a screen point, or elements carrying some text — never both at once."),
|
|
54
|
+
]);
|
|
55
|
+
const inspectMobileAnswerSchema = z.discriminatedUnion("what", [
|
|
56
|
+
z.object({
|
|
57
|
+
outcome: z.literal("success"),
|
|
58
|
+
session: z.discriminatedUnion("type", [
|
|
59
|
+
z.object({
|
|
60
|
+
deviceName: z.string().optional(),
|
|
61
|
+
platformName: z.string(),
|
|
62
|
+
sessionId: z.string(),
|
|
63
|
+
type: z.literal("ready"),
|
|
64
|
+
}),
|
|
65
|
+
z.object({
|
|
66
|
+
error: z.string(),
|
|
67
|
+
type: z.literal("unreachable"),
|
|
68
|
+
}),
|
|
69
|
+
z.object({
|
|
70
|
+
sessionCount: z.number(),
|
|
71
|
+
type: z.literal("ambiguous"),
|
|
72
|
+
}),
|
|
73
|
+
z.object({ type: z.literal("no-session") }),
|
|
74
|
+
]),
|
|
75
|
+
what: z.literal("session"),
|
|
76
|
+
}),
|
|
77
|
+
z.object({
|
|
78
|
+
contexts: z.string().array(),
|
|
79
|
+
current: z.string(),
|
|
80
|
+
outcome: z.literal("success"),
|
|
81
|
+
what: z.literal("contexts"),
|
|
82
|
+
}),
|
|
83
|
+
z.object({
|
|
84
|
+
context: z.string(),
|
|
85
|
+
orientation: orientationSchema,
|
|
86
|
+
outcome: z.literal("success"),
|
|
87
|
+
pageSource: pageSourceNodeSchema,
|
|
88
|
+
what: z.literal("page"),
|
|
89
|
+
}),
|
|
90
|
+
z.object({
|
|
91
|
+
matches: elementSchema.array(),
|
|
92
|
+
outcome: z.literal("success"),
|
|
93
|
+
what: z.literal("elements"),
|
|
94
|
+
}),
|
|
95
|
+
]);
|
|
96
|
+
export const makeInspectMobileOnRunnerContract = () => {
|
|
97
|
+
const input = z.object({
|
|
98
|
+
id: runnerIdSchema.describe("Id of the runner to inspect."),
|
|
99
|
+
request: inspectMobileRequestSchema,
|
|
100
|
+
});
|
|
101
|
+
const output = z.discriminatedUnion("outcome", [
|
|
102
|
+
inspectMobileAnswerSchema,
|
|
103
|
+
makeRunnerFailureSchema([
|
|
104
|
+
"runner-is-not-mobile",
|
|
105
|
+
"screen-needs-a-run",
|
|
106
|
+
"screen-not-ready",
|
|
107
|
+
runnerUnreachableFailureReason,
|
|
108
|
+
]),
|
|
109
|
+
]);
|
|
110
|
+
return {
|
|
111
|
+
description: `Inspect one thing on a mobile interactive runner: the Appium session's status, the WebView contexts available, the current context's page source, or the elements at a point or carrying some text. Mobile only — a browser runner answers \`runner-is-not-mobile\`; call \`runner.inspect\` for a browser's equivalent surface instead. \`what: "session"\` always answers with the session's own status rather than \`screen-needs-a-run\`, since that is the question it exists to answer; the other three request kinds need a live session first and answer the same \`screen-needs-a-run\` or \`screen-not-ready\` outcomes \`runner.performAction\` and \`runner.takeScreenshot\` use, instead of reading anything when there is none. \`screen-needs-a-run\` means no Appium session has started on this runner yet — call \`runner.runFlow\` with a flow that opens one, then inspect again. \`screen-not-ready\` means the runner's Appium session exists but did not answer this instant, or more than one is somehow live — retry once; if it persists, relaunch the runner. \`runner-is-not-mobile\` means there is nothing here to inspect, and retrying will never help — launch a \`node20WithAndroid\` or \`node20WithIos\` runner instead. ${retryableRunnerUnreachableDescription}`,
|
|
112
|
+
input,
|
|
113
|
+
kind: "read",
|
|
114
|
+
name: "runner.inspectMobile",
|
|
115
|
+
output,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=inspectMobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectMobile.js","sourceRoot":"","sources":["../../../src/v1/runner/inspectMobile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const elementSchema: z.ZodObject<{
|
|
3
|
+
attributes: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
4
|
+
bounds: z.ZodOptional<z.ZodObject<{
|
|
5
|
+
bottom: z.ZodNumber;
|
|
6
|
+
left: z.ZodNumber;
|
|
7
|
+
right: z.ZodNumber;
|
|
8
|
+
top: z.ZodNumber;
|
|
9
|
+
}, z.core.$strip>>;
|
|
10
|
+
center: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
x: z.ZodNumber;
|
|
12
|
+
y: z.ZodNumber;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
selectors: z.ZodArray<z.ZodObject<{
|
|
15
|
+
strategy: z.ZodUnion<readonly [z.ZodObject<{
|
|
16
|
+
name: z.ZodLiteral<"xpath">;
|
|
17
|
+
type: z.ZodEnum<{
|
|
18
|
+
unique: "unique";
|
|
19
|
+
"full-path": "full-path";
|
|
20
|
+
"sibling-of": "sibling-of";
|
|
21
|
+
"parent-of": "parent-of";
|
|
22
|
+
}>;
|
|
23
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
24
|
+
name: z.ZodLiteral<"ios-predicate">;
|
|
25
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
26
|
+
hostSelector: z.ZodString;
|
|
27
|
+
innerSelector: z.ZodString;
|
|
28
|
+
name: z.ZodLiteral<"shadow">;
|
|
29
|
+
}, z.core.$strip>]>;
|
|
30
|
+
value: z.ZodString;
|
|
31
|
+
}, z.core.$strip>>;
|
|
32
|
+
tag: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
declare const basePageSourceNodeSchema: z.ZodObject<{
|
|
35
|
+
attributes: z.ZodOptional<z.ZodObject<{
|
|
36
|
+
bounds: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
bottom: z.ZodNumber;
|
|
38
|
+
left: z.ZodNumber;
|
|
39
|
+
right: z.ZodNumber;
|
|
40
|
+
top: z.ZodNumber;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
rest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
selectors: z.ZodArray<z.ZodObject<{
|
|
45
|
+
strategy: z.ZodUnion<readonly [z.ZodObject<{
|
|
46
|
+
name: z.ZodLiteral<"xpath">;
|
|
47
|
+
type: z.ZodEnum<{
|
|
48
|
+
unique: "unique";
|
|
49
|
+
"full-path": "full-path";
|
|
50
|
+
"sibling-of": "sibling-of";
|
|
51
|
+
"parent-of": "parent-of";
|
|
52
|
+
}>;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
name: z.ZodLiteral<"ios-predicate">;
|
|
55
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
56
|
+
hostSelector: z.ZodString;
|
|
57
|
+
innerSelector: z.ZodString;
|
|
58
|
+
name: z.ZodLiteral<"shadow">;
|
|
59
|
+
}, z.core.$strip>]>;
|
|
60
|
+
value: z.ZodString;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
tag: z.ZodString;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
type PageSourceNode = z.infer<typeof basePageSourceNodeSchema> & {
|
|
65
|
+
children?: (PageSourceNode | string)[];
|
|
66
|
+
};
|
|
67
|
+
export declare const pageSourceNodeSchema: z.ZodType<PageSourceNode>;
|
|
68
|
+
export declare const orientationSchema: z.ZodEnum<{
|
|
69
|
+
PORTRAIT: "PORTRAIT";
|
|
70
|
+
LANDSCAPE: "LANDSCAPE";
|
|
71
|
+
}>;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=inspectMobileShapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectMobileShapes.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/inspectMobileShapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgCxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYxB,CAAC;AAEH,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS5B,CAAC;AAEH,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAAG;IAC/D,QAAQ,CAAC,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAQvD,CAAC;AAEL,eAAO,MAAM,iBAAiB;;;EAAoC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Duplicated from `packages/domain-runner-types/src/lib/appium.ts`: that
|
|
4
|
+
* package is private and this one is published, so it can't be imported here.
|
|
5
|
+
* A shape refused there must stay refused here.
|
|
6
|
+
*/
|
|
7
|
+
const boundsSchema = z.object({
|
|
8
|
+
bottom: z.number(),
|
|
9
|
+
left: z.number(),
|
|
10
|
+
right: z.number(),
|
|
11
|
+
top: z.number(),
|
|
12
|
+
});
|
|
13
|
+
const pointSchema = z.object({ x: z.number(), y: z.number() });
|
|
14
|
+
const selectorSchema = z.object({
|
|
15
|
+
strategy: z.union([
|
|
16
|
+
z.object({
|
|
17
|
+
name: z.literal("xpath"),
|
|
18
|
+
type: z.enum(["unique", "full-path", "sibling-of", "parent-of"]),
|
|
19
|
+
}),
|
|
20
|
+
z.object({ name: z.literal("ios-predicate") }),
|
|
21
|
+
z.object({
|
|
22
|
+
hostSelector: z.string(),
|
|
23
|
+
innerSelector: z.string(),
|
|
24
|
+
name: z.literal("shadow"),
|
|
25
|
+
}),
|
|
26
|
+
]),
|
|
27
|
+
value: z.string(),
|
|
28
|
+
});
|
|
29
|
+
export const elementSchema = z.object({
|
|
30
|
+
attributes: z.record(z.string(), z.string()),
|
|
31
|
+
bounds: boundsSchema
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("The element's on-screen rectangle, absent off-screen."),
|
|
34
|
+
center: pointSchema
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Derived from `bounds`; absent wherever `bounds` is."),
|
|
37
|
+
selectors: selectorSchema
|
|
38
|
+
.array()
|
|
39
|
+
.describe("Ways to address this element again, most reliable first."),
|
|
40
|
+
tag: z.string(),
|
|
41
|
+
});
|
|
42
|
+
const basePageSourceNodeSchema = z.object({
|
|
43
|
+
attributes: z
|
|
44
|
+
.object({
|
|
45
|
+
bounds: boundsSchema.optional(),
|
|
46
|
+
rest: z.record(z.string(), z.string()).optional(),
|
|
47
|
+
})
|
|
48
|
+
.optional(),
|
|
49
|
+
selectors: selectorSchema.array(),
|
|
50
|
+
tag: z.string(),
|
|
51
|
+
});
|
|
52
|
+
export const pageSourceNodeSchema = basePageSourceNodeSchema.extend({
|
|
53
|
+
children: z
|
|
54
|
+
.lazy(() => z.union([pageSourceNodeSchema, z.string()]).array())
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("A string child is a text node; there is no element to select."),
|
|
57
|
+
});
|
|
58
|
+
export const orientationSchema = z.enum(["PORTRAIT", "LANDSCAPE"]);
|
|
59
|
+
//# sourceMappingURL=inspectMobileShapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectMobileShapes.js","sourceRoot":"","sources":["../../../src/v1/runner/inspectMobileShapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;QAChB,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;SACjE,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;YACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC1B,CAAC;KACH,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,EAAE,YAAY;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,MAAM,EAAE,WAAW;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,SAAS,EAAE,cAAc;SACtB,KAAK,EAAE;SACP,QAAQ,CAAC,0DAA0D,CAAC;IACvE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC;SACD,QAAQ,EAAE;IACb,SAAS,EAAE,cAAc,CAAC,KAAK,EAAE;IACjC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,wBAAwB,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;SAC/D,QAAQ,EAAE;SACV,QAAQ,CACP,+DAA+D,CAChE;CACJ,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
/** How much of a failure reason this API passes on. */
|
|
3
3
|
export declare const maxActionErrorMessageLength = 1000;
|
|
4
4
|
export declare const makePerformActionOnRunnerContract: () => {
|
|
5
|
-
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
5
|
+
readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
6
6
|
readonly input: z.ZodObject<{
|
|
7
7
|
action: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
8
8
|
button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
|
|
@@ -52,9 +52,10 @@ export declare const makePerformActionOnRunnerContract: () => {
|
|
|
52
52
|
}, z.core.$strip>, z.ZodObject<{
|
|
53
53
|
failureReason: z.ZodEnum<{
|
|
54
54
|
"runner-unreachable": "runner-unreachable";
|
|
55
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
56
55
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
57
56
|
"screen-not-ready": "screen-not-ready";
|
|
57
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
58
|
+
"action-not-supported-on-mobile": "action-not-supported-on-mobile";
|
|
58
59
|
}>;
|
|
59
60
|
outcome: z.ZodLiteral<"failure">;
|
|
60
61
|
}, z.core.$strip>], "failureReason">], "outcome">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performAction.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/performAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"performAction.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/performAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,uDAAuD;AACvD,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C7C,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { runnerUnreachableFailureReason } from "./unreachable.js";
|
|
|
7
7
|
// Not the shared retryable wording: the action may have taken effect before its
|
|
8
8
|
// answer was lost.
|
|
9
9
|
const unreachableDescription = "`runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
|
|
10
|
+
const notSupportedOnMobileDescription = "`action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused.";
|
|
10
11
|
/** How much of a failure reason this API passes on. */
|
|
11
12
|
export const maxActionErrorMessageLength = 1_000;
|
|
12
13
|
export const makePerformActionOnRunnerContract = () => {
|
|
@@ -27,6 +28,7 @@ export const makePerformActionOnRunnerContract = () => {
|
|
|
27
28
|
}),
|
|
28
29
|
makeRunnerFailureSchema([
|
|
29
30
|
...screenFailureReasons,
|
|
31
|
+
"action-not-supported-on-mobile",
|
|
30
32
|
runnerUnreachableFailureReason,
|
|
31
33
|
]),
|
|
32
34
|
]);
|
|
@@ -35,7 +37,7 @@ export const makePerformActionOnRunnerContract = () => {
|
|
|
35
37
|
failure,
|
|
36
38
|
]);
|
|
37
39
|
return {
|
|
38
|
-
description: `Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as \`runner.takeScreenshot\`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus \`screenshot\` (use \`runner.takeScreenshot\`) and \`wait\` (delay on the caller's side). A success means the action took effect. \`action-failed\`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no \`runner.runFlow\` is needed before acting; if the browser is still starting when the wait runs out, the answer is \`screen-not-ready\` and retrying converges. \`screen-needs-a-run\` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call \`runner.runFlow\` with a flow that opens a browser. ${screenNotReadyDescription} A \`navigate\` does not go through the screen, so a screen that is not ready does not stop it. ${runnerHasNoScreenDescription} ${unreachableDescription}`,
|
|
40
|
+
description: `Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as \`runner.takeScreenshot\`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus \`screenshot\` (use \`runner.takeScreenshot\`) and \`wait\` (delay on the caller's side). A success means the action took effect. \`action-failed\`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no \`runner.runFlow\` is needed before acting; if the browser is still starting when the wait runs out, the answer is \`screen-not-ready\` and retrying converges. On a mobile runner, the same \`screen-needs-a-run\` and \`screen-not-ready\` outcomes mean no Appium session has started yet, or it did not answer this instant; \`runner.runFlow\` is what starts one, same as a browser. \`screen-needs-a-run\` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call \`runner.runFlow\` with a flow that opens a browser. ${screenNotReadyDescription} A \`navigate\` does not go through the screen, so a screen that is not ready does not stop it. ${runnerHasNoScreenDescription} ${notSupportedOnMobileDescription} ${unreachableDescription}`,
|
|
39
41
|
input,
|
|
40
42
|
kind: "write",
|
|
41
43
|
name: "runner.performAction",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performAction.js","sourceRoot":"","sources":["../../../src/v1/runner/performAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE,gFAAgF;AAChF,mBAAmB;AACnB,MAAM,sBAAsB,GAC1B,mQAAmQ,CAAC;AAEtQ,uDAAuD;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,EAAE;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAClC,yFAAyF,CAC1F;QACD,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC3D,CAAC,CAAC;IAEH,+EAA+E;IAC/E,8CAA8C;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,CAAC,eAAe,EAAE;QACpD,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,2BAA2B,CAAC;iBAChC,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;YACzC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;QACF,uBAAuB,CAAC;YACtB,GAAG,oBAAoB;YACvB,8BAA8B;SAC/B,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"performAction.js","sourceRoot":"","sources":["../../../src/v1/runner/performAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE,gFAAgF;AAChF,mBAAmB;AACnB,MAAM,sBAAsB,GAC1B,mQAAmQ,CAAC;AAEtQ,MAAM,+BAA+B,GACnC,6ZAA6Z,CAAC;AAEha,uDAAuD;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,EAAE;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAClC,yFAAyF,CAC1F;QACD,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC3D,CAAC,CAAC;IAEH,+EAA+E;IAC/E,8CAA8C;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,CAAC,eAAe,EAAE;QACpD,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,2BAA2B,CAAC;iBAChC,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;YACzC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;QACF,uBAAuB,CAAC;YACtB,GAAG,oBAAoB;YACvB,gCAAgC;YAChC,8BAA8B;SAC/B,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,8yCAA8yC,yBAAyB,mGAAmG,4BAA4B,IAAI,+BAA+B,IAAI,sBAAsB,EAAE;QAClhD,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,sBAAsB;QAC5B,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const makeTakeScreenshotOnRunnerContract: () => {
|
|
3
|
-
readonly description: "Take one screenshot of an interactive runner's screen.
|
|
3
|
+
readonly description: "Take one screenshot of an interactive runner's screen. On a runner with a browser the image is the whole virtual desktop, browser window and all. On a mobile runner it is the device's own screen, re-encoded to JPEG on the pod so this contract reads one image format regardless of runner family. `screen-needs-a-run` if the runner's virtual desktop has never started. Waiting will not change this and retrying is pointless — call `runner.runFlow` with a flow that opens a browser, then ask for the screen again. On a runner image with a browser that has never run anything, any `runner.performAction` also starts the browser itself. Evaluating a snippet does not start the desktop. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may be too busy to answer. Nothing was changed, so retrying is safe; if it persists, launch the runner again.";
|
|
4
4
|
readonly input: z.ZodObject<{
|
|
5
5
|
id: z.ZodString;
|
|
6
6
|
}, z.core.$strip>;
|
|
@@ -12,9 +12,9 @@ export declare const makeTakeScreenshotOnRunnerContract: () => {
|
|
|
12
12
|
}, z.core.$strip>, z.ZodObject<{
|
|
13
13
|
failureReason: z.ZodEnum<{
|
|
14
14
|
"runner-unreachable": "runner-unreachable";
|
|
15
|
-
"runner-has-no-screen": "runner-has-no-screen";
|
|
16
15
|
"screen-needs-a-run": "screen-needs-a-run";
|
|
17
16
|
"screen-not-ready": "screen-not-ready";
|
|
17
|
+
"runner-has-no-screen": "runner-has-no-screen";
|
|
18
18
|
}>;
|
|
19
19
|
outcome: z.ZodLiteral<"failure">;
|
|
20
20
|
}, z.core.$strip>], "outcome">;
|
|
@@ -25,7 +25,7 @@ export const makeTakeScreenshotOnRunnerContract = () => {
|
|
|
25
25
|
]),
|
|
26
26
|
]);
|
|
27
27
|
return {
|
|
28
|
-
description: `Take one screenshot of an interactive runner's screen.
|
|
28
|
+
description: `Take one screenshot of an interactive runner's screen. On a runner with a browser the image is the whole virtual desktop, browser window and all. On a mobile runner it is the device's own screen, re-encoded to JPEG on the pod so this contract reads one image format regardless of runner family. ${screenNeedsARunDescription} ${screenNotReadyDescription} ${runnerHasNoScreenDescription} ${retryableRunnerUnreachableDescription}`,
|
|
29
29
|
input,
|
|
30
30
|
kind: "read",
|
|
31
31
|
name: "runner.takeScreenshot",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"takeScreenshot.js","sourceRoot":"","sources":["../../../src/v1/runner/takeScreenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qCAAqC,EACrC,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,EAAE;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACzE,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,iEAAiE;YACjE,uEAAuE;YACvE,wBAAwB;YACxB,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,8KAA8K,CAC/K;YACH,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;QACF,uBAAuB,CAAC;YACtB,GAAG,oBAAoB;YACvB,8BAA8B;SAC/B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"takeScreenshot.js","sourceRoot":"","sources":["../../../src/v1/runner/takeScreenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qCAAqC,EACrC,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,EAAE;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACzE,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,iEAAiE;YACjE,uEAAuE;YACvE,wBAAwB;YACxB,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,8KAA8K,CAC/K;YACH,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;QACF,uBAAuB,CAAC;YACtB,GAAG,oBAAoB;YACvB,8BAA8B;SAC/B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,0SAA0S,0BAA0B,IAAI,yBAAyB,IAAI,4BAA4B,IAAI,qCAAqC,EAAE;QACzb,KAAK;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,uBAAuB;QAC7B,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { type BrowserAction, browserActionSchema, } from "./runner/browserAction.js";
|
|
2
|
+
export { runEnvironmentSchema } from "./runner/environment.js";
|
|
3
|
+
export { isShippableRunFilePath, runFilePathSchema, runPackageJsonPath, shippableRunFileExtensions, } from "./runner/files.js";
|
|
4
|
+
export { type RunnerNameForPublicApi, makeRunnerSchema, runnerIdSchema, runnerNameSchema, } from "./runner/identity.js";
|
|
5
|
+
export { type InspectOnRunnerRequest, inspectRequestSchema, } from "./runner/inspect.js";
|
|
6
|
+
export { type InspectMobileRequest, inspectMobileRequestSchema, } from "./runner/inspectMobile.js";
|
|
7
|
+
export { type JournalEntry, type JournalStream, type KnownJournalStream, type ReadJournalRequest, type ReadJournalResponse, journalEntrySchema, journalStreamSchema, knownJournalStreams, maxJournalStreamNameLength, readJournalRequestSchema, readJournalResponseSchema, } from "./runner/journal.js";
|
|
8
|
+
export { type RunFiles, maxRunFilesByteLength, maxRunnerRequestEncodedByteLength, runFilesByteLength, runFilesSchema, } from "./runner/payloadSize.js";
|
|
9
|
+
export { maxActionErrorMessageLength } from "./runner/performAction.js";
|
|
10
|
+
export { type RunSelection, runSelectionSchema, } from "./runner/runSelection.js";
|
|
11
|
+
//# sourceMappingURL=runnerReexports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerReexports.d.ts","sourceRoot":"","sources":["../../src/v1/runnerReexports.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAK/D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,sBAAsB,EAC3B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,oBAAoB,EACzB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,QAAQ,EACb,qBAAqB,EACrB,iCAAiC,EACjC,kBAAkB,EAClB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EACjB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// The `runner` resource's shared types and schemas, re-exported here rather
|
|
2
|
+
// than restated by every server and client that needs them. Split out of
|
|
3
|
+
// `index.ts` to keep that file under the line limit.
|
|
4
|
+
export { browserActionSchema, } from "./runner/browserAction.js";
|
|
5
|
+
// Carries the reservation of QA Wolf's own variable names, which the server
|
|
6
|
+
// validates with rather than restating — a second copy of that rule is how the
|
|
7
|
+
// reservation comes to differ from what is actually stamped.
|
|
8
|
+
export { runEnvironmentSchema } from "./runner/environment.js";
|
|
9
|
+
// The travel rule for files bound for a runner: which files travel, how much may
|
|
10
|
+
// travel, and what environment a run may carry. A client needs the predicate and
|
|
11
|
+
// the size bounds to collect and pre-check with; the schemas are also what the
|
|
12
|
+
// server and the runner validate with, so they are shared rather than restated.
|
|
13
|
+
export { isShippableRunFilePath, runFilePathSchema, runPackageJsonPath, shippableRunFileExtensions, } from "./runner/files.js";
|
|
14
|
+
export { makeRunnerSchema, runnerIdSchema, runnerNameSchema, } from "./runner/identity.js";
|
|
15
|
+
export { inspectRequestSchema, } from "./runner/inspect.js";
|
|
16
|
+
export { inspectMobileRequestSchema, } from "./runner/inspectMobile.js";
|
|
17
|
+
// A journal read is answered verbatim by the public API, so its wire shapes are
|
|
18
|
+
// published here and the private journal package imports them from here.
|
|
19
|
+
export { journalEntrySchema, journalStreamSchema, knownJournalStreams, maxJournalStreamNameLength, readJournalRequestSchema, readJournalResponseSchema, } from "./runner/journal.js";
|
|
20
|
+
export { maxRunFilesByteLength, maxRunnerRequestEncodedByteLength, runFilesByteLength, runFilesSchema, } from "./runner/payloadSize.js";
|
|
21
|
+
export { maxActionErrorMessageLength } from "./runner/performAction.js";
|
|
22
|
+
export { runSelectionSchema, } from "./runner/runSelection.js";
|
|
23
|
+
//# sourceMappingURL=runnerReexports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerReexports.js","sourceRoot":"","sources":["../../src/v1/runnerReexports.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,qDAAqD;AACrD,OAAO,EAEL,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,4EAA4E;AAC5E,+EAA+E;AAC/E,6DAA6D;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,iFAAiF;AACjF,iFAAiF;AACjF,+EAA+E;AAC/E,gFAAgF;AAChF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,gFAAgF;AAChF,yEAAyE;AACzE,OAAO,EAML,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,qBAAqB,EACrB,iCAAiC,EACjC,kBAAkB,EAClB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAEL,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
|