@qawolf/api-contracts 0.53.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/v1/agent/send.d.ts +1 -1
  2. package/dist/v1/agent/send.js +1 -1
  3. package/dist/v1/agent/send.js.map +1 -1
  4. package/dist/v1/automate/index.d.ts +3 -2
  5. package/dist/v1/automate/index.d.ts.map +1 -1
  6. package/dist/v1/automate/index.js +2 -0
  7. package/dist/v1/automate/index.js.map +1 -1
  8. package/dist/v1/codeHostIntegration/find.d.ts +30 -0
  9. package/dist/v1/codeHostIntegration/find.d.ts.map +1 -0
  10. package/dist/v1/codeHostIntegration/find.js +32 -0
  11. package/dist/v1/codeHostIntegration/find.js.map +1 -0
  12. package/dist/v1/codeHostIntegration/index.d.ts +4 -0
  13. package/dist/v1/codeHostIntegration/index.d.ts.map +1 -0
  14. package/dist/v1/codeHostIntegration/index.js +4 -0
  15. package/dist/v1/codeHostIntegration/index.js.map +1 -0
  16. package/dist/v1/codeHostIntegration/listRepositories.d.ts +35 -0
  17. package/dist/v1/codeHostIntegration/listRepositories.d.ts.map +1 -0
  18. package/dist/v1/codeHostIntegration/listRepositories.js +34 -0
  19. package/dist/v1/codeHostIntegration/listRepositories.js.map +1 -0
  20. package/dist/v1/codeHostIntegration/resource.d.ts +19 -0
  21. package/dist/v1/codeHostIntegration/resource.d.ts.map +1 -0
  22. package/dist/v1/codeHostIntegration/resource.js +27 -0
  23. package/dist/v1/codeHostIntegration/resource.js.map +1 -0
  24. package/dist/v1/deployment/reportStatus.d.ts +2 -0
  25. package/dist/v1/deployment/reportStatus.d.ts.map +1 -1
  26. package/dist/v1/deployment/reportStatus.js +3 -40
  27. package/dist/v1/deployment/reportStatus.js.map +1 -1
  28. package/dist/v1/deployment/reportStatusMetadata.d.ts +10 -0
  29. package/dist/v1/deployment/reportStatusMetadata.d.ts.map +1 -0
  30. package/dist/v1/deployment/reportStatusMetadata.js +55 -0
  31. package/dist/v1/deployment/reportStatusMetadata.js.map +1 -0
  32. package/dist/v1/environment/create.d.ts +45 -0
  33. package/dist/v1/environment/create.d.ts.map +1 -0
  34. package/dist/v1/environment/create.js +29 -0
  35. package/dist/v1/environment/create.js.map +1 -0
  36. package/dist/v1/environment/deleteVariable.d.ts +3 -2
  37. package/dist/v1/environment/deleteVariable.d.ts.map +1 -1
  38. package/dist/v1/environment/deleteVariable.js +2 -0
  39. package/dist/v1/environment/deleteVariable.js.map +1 -1
  40. package/dist/v1/environment/find.d.ts +1 -0
  41. package/dist/v1/environment/find.d.ts.map +1 -1
  42. package/dist/v1/environment/getVariable.d.ts +3 -2
  43. package/dist/v1/environment/getVariable.d.ts.map +1 -1
  44. package/dist/v1/environment/getVariable.js +2 -0
  45. package/dist/v1/environment/getVariable.js.map +1 -1
  46. package/dist/v1/environment/index.d.ts +8 -45
  47. package/dist/v1/environment/index.d.ts.map +1 -1
  48. package/dist/v1/environment/index.js +4 -26
  49. package/dist/v1/environment/index.js.map +1 -1
  50. package/dist/v1/environment/resource.d.ts +1 -0
  51. package/dist/v1/environment/resource.d.ts.map +1 -1
  52. package/dist/v1/environment/resource.js +4 -0
  53. package/dist/v1/environment/resource.js.map +1 -1
  54. package/dist/v1/environment/update.d.ts +4 -2
  55. package/dist/v1/environment/update.d.ts.map +1 -1
  56. package/dist/v1/environment/update.js +2 -0
  57. package/dist/v1/environment/update.js.map +1 -1
  58. package/dist/v1/flow/index.d.ts +14 -2
  59. package/dist/v1/flow/index.d.ts.map +1 -1
  60. package/dist/v1/flow/index.js +32 -0
  61. package/dist/v1/flow/index.js.map +1 -1
  62. package/dist/v1/ids.d.ts +20 -1
  63. package/dist/v1/ids.d.ts.map +1 -1
  64. package/dist/v1/ids.js +16 -1
  65. package/dist/v1/ids.js.map +1 -1
  66. package/dist/v1/index.d.ts +288 -14
  67. package/dist/v1/index.d.ts.map +1 -1
  68. package/dist/v1/index.js +12 -1
  69. package/dist/v1/index.js.map +1 -1
  70. package/dist/v1/mcpToolDescription.d.ts.map +1 -1
  71. package/dist/v1/mcpToolDescription.js +1 -0
  72. package/dist/v1/mcpToolDescription.js.map +1 -1
  73. package/dist/v1/run/find.d.ts +4 -2
  74. package/dist/v1/run/find.d.ts.map +1 -1
  75. package/dist/v1/run/find.js +2 -0
  76. package/dist/v1/run/find.js.map +1 -1
  77. package/dist/v1/run/index.d.ts +4 -2
  78. package/dist/v1/run/index.d.ts.map +1 -1
  79. package/dist/v1/run/index.js +2 -0
  80. package/dist/v1/run/index.js.map +1 -1
  81. package/dist/v1/runner/get.d.ts +9 -4
  82. package/dist/v1/runner/get.d.ts.map +1 -1
  83. package/dist/v1/runner/get.js +16 -6
  84. package/dist/v1/runner/get.js.map +1 -1
  85. package/dist/v1/runner/identity.d.ts +1 -0
  86. package/dist/v1/runner/identity.d.ts.map +1 -1
  87. package/dist/v1/runner/identity.js +4 -3
  88. package/dist/v1/runner/identity.js.map +1 -1
  89. package/dist/v1/runner/index.d.ts +1 -1
  90. package/dist/v1/runner/index.js +1 -1
  91. package/dist/v1/runner/index.js.map +1 -1
  92. package/dist/v1/runner/performAction.d.ts +1 -1
  93. package/dist/v1/runner/performAction.d.ts.map +1 -1
  94. package/dist/v1/runner/performAction.js +4 -7
  95. package/dist/v1/runner/performAction.js.map +1 -1
  96. package/package.json +2 -2
@@ -50,7 +50,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
50
50
  readonly openWorldHint: true;
51
51
  readonly readOnlyHint: false;
52
52
  };
53
- readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, make the next action a normal user-visible assistant message containing the exact returned url, before any tool call or wait. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
53
+ readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, put the exact returned url in a normal user-visible assistant message, and repeat it in the last message of the turn: only a turn's trailing message is shown expanded. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
54
54
  readonly input: z.ZodObject<{
55
55
  environmentId: z.ZodOptional<PublicIdSchema>;
56
56
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -85,6 +85,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
85
85
  environmentId: PublicIdSchema;
86
86
  flowIds: z.ZodArray<FlowId>;
87
87
  patch: z.ZodOptional<z.ZodString>;
88
+ workspaceId: z.ZodOptional<WorkspaceId>;
88
89
  }, z.core.$strip>;
89
90
  readonly kind: "write";
90
91
  readonly name: "automate";
@@ -93,6 +94,114 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
93
94
  url: z.ZodURL;
94
95
  }, z.core.$strip>;
95
96
  };
97
+ codeHostIntegration: {
98
+ find: {
99
+ readonly annotations: {
100
+ readonly destructiveHint: false;
101
+ readonly openWorldHint: false;
102
+ readonly readOnlyHint: true;
103
+ };
104
+ readonly description: "List the workspace's code host integrations (GitHub or GitLab). A connected integration lets QA Wolf read repositories and receive the code host's webhooks. codeHostIntegration.listRepositories pages the repositories each integration covers.";
105
+ readonly input: z.ZodObject<{
106
+ workspaceId: z.ZodOptional<WorkspaceId>;
107
+ }, z.core.$strip>;
108
+ readonly kind: "read";
109
+ readonly name: "codeHostIntegration.find";
110
+ readonly output: z.ZodObject<{
111
+ integrations: z.ZodArray<z.ZodObject<{
112
+ connectedAt: z.ZodISODateTime;
113
+ provider: z.ZodEnum<{
114
+ github: "github";
115
+ gitlab: "gitlab";
116
+ }>;
117
+ suspendedAt: z.ZodOptional<z.ZodISODateTime>;
118
+ url: z.ZodURL;
119
+ }, z.core.$strip>>;
120
+ settingsUrl: z.ZodURL;
121
+ }, z.core.$strip>;
122
+ };
123
+ listRepositories: {
124
+ readonly annotations: {
125
+ readonly destructiveHint: false;
126
+ readonly openWorldHint: false;
127
+ readonly readOnlyHint: true;
128
+ };
129
+ readonly description: "List the repositories the workspace's code host integrations cover, alphabetical by full name. The list reflects the last sync from the code host; codeHostIntegration.find lists the integrations themselves.";
130
+ readonly input: z.ZodObject<{
131
+ cursor: z.ZodOptional<z.ZodString>;
132
+ limit: z.ZodDefault<z.ZodNumber>;
133
+ provider: z.ZodOptional<z.ZodEnum<{
134
+ github: "github";
135
+ gitlab: "gitlab";
136
+ }>>;
137
+ workspaceId: z.ZodOptional<WorkspaceId>;
138
+ }, z.core.$strip>;
139
+ readonly kind: "read";
140
+ readonly name: "codeHostIntegration.listRepositories";
141
+ readonly output: z.ZodObject<{
142
+ nextCursor: z.ZodOptional<z.ZodString>;
143
+ repositories: z.ZodArray<z.ZodObject<{
144
+ fullName: z.ZodString;
145
+ provider: z.ZodEnum<{
146
+ github: "github";
147
+ gitlab: "gitlab";
148
+ }>;
149
+ url: z.ZodURL;
150
+ }, z.core.$strip>>;
151
+ }, z.core.$strip>;
152
+ };
153
+ };
154
+ deployment: {
155
+ reportStatus: {
156
+ readonly annotations: {
157
+ readonly destructiveHint: true;
158
+ readonly openWorldHint: true;
159
+ readonly readOnlyHint: false;
160
+ };
161
+ readonly description: "Report a deployment lifecycle status. A deployment's first success report evaluates global triggers asynchronously, and it is the only report that does: a trigger added or unpaused later does not make an already reported deployment evaluate again. Report that deployment under a new providerDeploymentId to evaluate it against the current triggers. The response contains the deployment only, not the resulting runs. This route requires an organization or user API key.";
162
+ readonly input: z.ZodObject<{
163
+ deployTarget: z.ZodOptional<z.ZodURL>;
164
+ environment: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
165
+ id: EnvironmentId;
166
+ }, z.core.$strict>, z.ZodObject<{
167
+ baseEphemeralEnvironment: z.ZodOptional<z.ZodString>;
168
+ ephemeral: z.ZodOptional<z.ZodBoolean>;
169
+ name: z.ZodString;
170
+ }, z.core.$strict>]>>;
171
+ environmentVariables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
172
+ metadata: z.ZodOptional<z.ZodObject<{
173
+ commitAuthorName: z.ZodOptional<z.ZodString>;
174
+ commitMessage: z.ZodOptional<z.ZodString>;
175
+ commitSha: z.ZodOptional<z.ZodString>;
176
+ pullRequestNumber: z.ZodOptional<z.ZodNumber>;
177
+ ref: z.ZodOptional<z.ZodString>;
178
+ repository: z.ZodOptional<z.ZodString>;
179
+ }, z.core.$strict>>;
180
+ providerDeploymentId: z.ZodString;
181
+ status: z.ZodEnum<{
182
+ success: "success";
183
+ pending: "pending";
184
+ failure: "failure";
185
+ inactive: "inactive";
186
+ }>;
187
+ workspaceId: WorkspaceId;
188
+ }, z.core.$strict>;
189
+ readonly kind: "write";
190
+ readonly name: "deployment.reportStatus";
191
+ readonly output: z.ZodObject<{
192
+ deployment: z.ZodObject<{
193
+ id: PublicIdSchema;
194
+ status: z.ZodEnum<{
195
+ success: "success";
196
+ pending: "pending";
197
+ failure: "failure";
198
+ inactive: "inactive";
199
+ }>;
200
+ url: z.ZodURL;
201
+ }, z.core.$strip>;
202
+ }, z.core.$strip>;
203
+ };
204
+ };
96
205
  email: {
97
206
  find: {
98
207
  readonly annotations: {
@@ -334,6 +443,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
334
443
  running: "running";
335
444
  }>;
336
445
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
446
+ variablesUrl: z.ZodOptional<z.ZodURL>;
337
447
  url: z.ZodURL;
338
448
  }, z.core.$strip>;
339
449
  };
@@ -347,6 +457,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
347
457
  readonly input: z.ZodObject<{
348
458
  environmentId: PublicIdSchema;
349
459
  name: z.ZodString;
460
+ workspaceId: z.ZodOptional<WorkspaceId>;
350
461
  }, z.core.$strip>;
351
462
  readonly kind: "write";
352
463
  readonly name: "environment.deleteVariable";
@@ -400,6 +511,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
400
511
  running: "running";
401
512
  }>;
402
513
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
514
+ variablesUrl: z.ZodOptional<z.ZodURL>;
403
515
  url: z.ZodURL;
404
516
  }, z.core.$strip>>;
405
517
  nextCursor: z.ZodOptional<z.ZodString>;
@@ -414,6 +526,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
414
526
  readonly description: "Read a single environment's name, kind, standing run health, flow-code branch and reconciliation state, run concurrency limit, and termination state. If flowCodeBranch exists, use its syncStatus for Git reconciliation and read lastSyncedCommitHash only when syncStatus is reconciled.";
415
527
  readonly input: z.ZodObject<{
416
528
  environmentId: PublicIdSchema;
529
+ workspaceId: z.ZodOptional<WorkspaceId>;
417
530
  }, z.core.$strip>;
418
531
  readonly kind: "read";
419
532
  readonly name: "environment.get";
@@ -442,6 +555,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
442
555
  running: "running";
443
556
  }>;
444
557
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
558
+ variablesUrl: z.ZodOptional<z.ZodURL>;
445
559
  url: z.ZodURL;
446
560
  }, z.core.$strip>;
447
561
  };
@@ -455,6 +569,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
455
569
  readonly input: z.ZodObject<{
456
570
  environmentId: PublicIdSchema;
457
571
  variableNames: z.ZodArray<z.ZodString>;
572
+ workspaceId: z.ZodOptional<WorkspaceId>;
458
573
  }, z.core.$strip>;
459
574
  readonly kind: "read";
460
575
  readonly name: "environment.getVariable";
@@ -475,6 +590,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
475
590
  readonly description: "Use this to answer which QA Wolf environment variables are available to test code. Returns names only; values never leave the server.";
476
591
  readonly input: z.ZodObject<{
477
592
  environmentId: PublicIdSchema;
593
+ workspaceId: z.ZodOptional<WorkspaceId>;
478
594
  }, z.core.$strip>;
479
595
  readonly kind: "read";
480
596
  readonly name: "environment.listVariableNames";
@@ -493,6 +609,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
493
609
  environmentId: PublicIdSchema;
494
610
  name: z.ZodString;
495
611
  value: z.ZodString;
612
+ workspaceId: z.ZodOptional<WorkspaceId>;
496
613
  }, z.core.$strip>;
497
614
  readonly kind: "write";
498
615
  readonly name: "environment.setVariable";
@@ -511,6 +628,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
511
628
  environmentId: PublicIdSchema;
512
629
  name: z.ZodOptional<z.ZodString>;
513
630
  runConcurrencyLimit: z.ZodOptional<z.ZodString>;
631
+ workspaceId: z.ZodOptional<WorkspaceId>;
514
632
  }, z.core.$strip>;
515
633
  readonly kind: "write";
516
634
  readonly name: "environment.update";
@@ -539,6 +657,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
539
657
  running: "running";
540
658
  }>;
541
659
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
660
+ variablesUrl: z.ZodOptional<z.ZodURL>;
542
661
  url: z.ZodURL;
543
662
  }, z.core.$strip>;
544
663
  };
@@ -622,10 +741,21 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
622
741
  aiTaskId: z.ZodOptional<AiTaskId>;
623
742
  environmentId: PublicIdSchema;
624
743
  includeDrafts: z.ZodDefault<z.ZodBoolean>;
744
+ workspaceId: z.ZodOptional<WorkspaceId>;
625
745
  }, z.core.$strip>;
626
746
  readonly kind: "read";
627
747
  readonly name: "flow.list";
628
748
  readonly output: z.ZodObject<{
749
+ emptyReason: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
750
+ type: z.ZodLiteral<"branch-never-reconciled">;
751
+ }, z.core.$strip>, z.ZodObject<{
752
+ type: z.ZodLiteral<"commit-has-no-flow-files">;
753
+ }, z.core.$strip>, z.ZodObject<{
754
+ hiddenDraftCount: z.ZodNumber;
755
+ type: z.ZodLiteral<"every-flow-is-a-draft">;
756
+ }, z.core.$strip>, z.ZodObject<{
757
+ type: z.ZodLiteral<"no-flow-matched-the-listing">;
758
+ }, z.core.$strip>], "type">>;
629
759
  flows: z.ZodArray<z.ZodObject<{
630
760
  executionTarget: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
631
761
  flowId: FlowId;
@@ -1077,6 +1207,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1077
1207
  ignoreRules: z.ZodDefault<z.ZodBoolean>;
1078
1208
  pullRequestNumber: z.ZodOptional<z.ZodNumber>;
1079
1209
  repository: z.ZodOptional<z.ZodString>;
1210
+ workspaceId: z.ZodOptional<WorkspaceId>;
1080
1211
  }, z.core.$strip>, z.ZodObject<{
1081
1212
  flowIds: z.ZodDefault<z.ZodArray<FlowId>>;
1082
1213
  tagNames: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -1163,6 +1294,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1163
1294
  readonly description: "List an environment's recent runs, newest first.";
1164
1295
  readonly input: z.ZodObject<{
1165
1296
  environmentId: PublicIdSchema;
1297
+ workspaceId: z.ZodOptional<WorkspaceId>;
1166
1298
  cursor: z.ZodOptional<z.ZodString>;
1167
1299
  limit: z.ZodDefault<z.ZodNumber>;
1168
1300
  createdAfter: z.ZodOptional<z.ZodISODateTime>;
@@ -1383,18 +1515,23 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1383
1515
  readonly openWorldHint: false;
1384
1516
  readonly readOnlyHint: true;
1385
1517
  };
1386
- readonly description: "Report whether a runner is running under this id on the caller's team. This is a lookup: it never starts a runner, and it does not reset a runner's inactivity clock the way reading its journal does. An id that is not running is a success with `running: false` rather than an error, so this is how to check a runner is still there before addressing it.";
1518
+ readonly description: "Report whether a runner is running under this id on the caller's team. This is a lookup: it never starts a runner, and it does not reset a runner's inactivity clock the way reading its journal does. An id that is not running is a success with `running: false` rather than an error, so this is how to check a runner is still there before addressing it. A running runner also reports the `url` to watch it on, so an id alone is enough to recover the link to give the user.";
1387
1519
  readonly input: z.ZodObject<{
1388
1520
  id: z.ZodString;
1389
1521
  workspaceId: z.ZodOptional<WorkspaceId>;
1390
1522
  }, z.core.$strip>;
1391
1523
  readonly kind: "read";
1392
1524
  readonly name: "runner.get";
1393
- readonly output: z.ZodObject<{
1525
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1394
1526
  id: z.ZodString;
1395
1527
  outcome: z.ZodLiteral<"success">;
1396
- running: z.ZodBoolean;
1397
- }, z.core.$strip>;
1528
+ running: z.ZodLiteral<false>;
1529
+ }, z.core.$strip>, z.ZodObject<{
1530
+ id: z.ZodString;
1531
+ outcome: z.ZodLiteral<"success">;
1532
+ running: z.ZodLiteral<true>;
1533
+ url: z.ZodURL;
1534
+ }, z.core.$strip>], "running">;
1398
1535
  };
1399
1536
  highlightSelector: {
1400
1537
  readonly annotations: {
@@ -1717,7 +1854,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1717
1854
  readonly openWorldHint: false;
1718
1855
  readonly readOnlyHint: false;
1719
1856
  };
1720
- readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened.";
1857
+ readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. A success means the runner is answering: the call waits for the pod it started to come up, so the very next call to the runner reaches it. If the pod does not come up in time the call fails instead, leaving the runner running — launching the same id again attaches to it. After a successful launch, put the exact returned `url` in a normal user-visible assistant message so they can watch while the browser is driven. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
1721
1858
  readonly input: z.ZodObject<{
1722
1859
  id: z.ZodString;
1723
1860
  runnerName: z.ZodOptional<z.ZodEnum<{
@@ -1777,7 +1914,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1777
1914
  readonly openWorldHint: true;
1778
1915
  readonly readOnlyHint: false;
1779
1916
  };
1780
- 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. With `withScreenshot: true`, the answer also carries `imageJpegBase64`: a screenshot taken after the action, once the screen has changed from just before it or half a second has passed, whichever comes first. One call instead of `runner.performAction` followed by `runner.takeScreenshot`, with no fixed wait in between. Anything animating on the page counts as a change. The action itself is performed exactly as without the option; if the screen could serve no frame after it — a display restart, or a `navigate` on a desktop that is still starting — the action's result comes back without `imageJpegBase64`, so take a screenshot separately rather than repeating the action. On a mobile runner the screenshot is the device's own, taken right after a performed action. `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.";
1917
+ readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. One action per request, and the runner serves one at a time. 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. `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.";
1781
1918
  readonly input: z.ZodObject<{
1782
1919
  action: z.ZodDiscriminatedUnion<[z.ZodObject<{
1783
1920
  button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
@@ -2601,7 +2738,7 @@ export declare const publicContractsV1: {
2601
2738
  readonly openWorldHint: true;
2602
2739
  readonly readOnlyHint: false;
2603
2740
  };
2604
- readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, make the next action a normal user-visible assistant message containing the exact returned url, before any tool call or wait. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
2741
+ readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, put the exact returned url in a normal user-visible assistant message, and repeat it in the last message of the turn: only a turn's trailing message is shown expanded. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
2605
2742
  readonly input: z.ZodObject<{
2606
2743
  environmentId: z.ZodOptional<PublicIdSchema>;
2607
2744
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -2636,6 +2773,7 @@ export declare const publicContractsV1: {
2636
2773
  environmentId: PublicIdSchema;
2637
2774
  flowIds: z.ZodArray<PublicIdSchema>;
2638
2775
  patch: z.ZodOptional<z.ZodString>;
2776
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2639
2777
  }, z.core.$strip>;
2640
2778
  readonly kind: "write";
2641
2779
  readonly name: "automate";
@@ -2644,6 +2782,114 @@ export declare const publicContractsV1: {
2644
2782
  url: z.ZodURL;
2645
2783
  }, z.core.$strip>;
2646
2784
  };
2785
+ codeHostIntegration: {
2786
+ find: {
2787
+ readonly annotations: {
2788
+ readonly destructiveHint: false;
2789
+ readonly openWorldHint: false;
2790
+ readonly readOnlyHint: true;
2791
+ };
2792
+ readonly description: "List the workspace's code host integrations (GitHub or GitLab). A connected integration lets QA Wolf read repositories and receive the code host's webhooks. codeHostIntegration.listRepositories pages the repositories each integration covers.";
2793
+ readonly input: z.ZodObject<{
2794
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2795
+ }, z.core.$strip>;
2796
+ readonly kind: "read";
2797
+ readonly name: "codeHostIntegration.find";
2798
+ readonly output: z.ZodObject<{
2799
+ integrations: z.ZodArray<z.ZodObject<{
2800
+ connectedAt: z.ZodISODateTime;
2801
+ provider: z.ZodEnum<{
2802
+ github: "github";
2803
+ gitlab: "gitlab";
2804
+ }>;
2805
+ suspendedAt: z.ZodOptional<z.ZodISODateTime>;
2806
+ url: z.ZodURL;
2807
+ }, z.core.$strip>>;
2808
+ settingsUrl: z.ZodURL;
2809
+ }, z.core.$strip>;
2810
+ };
2811
+ listRepositories: {
2812
+ readonly annotations: {
2813
+ readonly destructiveHint: false;
2814
+ readonly openWorldHint: false;
2815
+ readonly readOnlyHint: true;
2816
+ };
2817
+ readonly description: "List the repositories the workspace's code host integrations cover, alphabetical by full name. The list reflects the last sync from the code host; codeHostIntegration.find lists the integrations themselves.";
2818
+ readonly input: z.ZodObject<{
2819
+ cursor: z.ZodOptional<z.ZodString>;
2820
+ limit: z.ZodDefault<z.ZodNumber>;
2821
+ provider: z.ZodOptional<z.ZodEnum<{
2822
+ github: "github";
2823
+ gitlab: "gitlab";
2824
+ }>>;
2825
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2826
+ }, z.core.$strip>;
2827
+ readonly kind: "read";
2828
+ readonly name: "codeHostIntegration.listRepositories";
2829
+ readonly output: z.ZodObject<{
2830
+ nextCursor: z.ZodOptional<z.ZodString>;
2831
+ repositories: z.ZodArray<z.ZodObject<{
2832
+ fullName: z.ZodString;
2833
+ provider: z.ZodEnum<{
2834
+ github: "github";
2835
+ gitlab: "gitlab";
2836
+ }>;
2837
+ url: z.ZodURL;
2838
+ }, z.core.$strip>>;
2839
+ }, z.core.$strip>;
2840
+ };
2841
+ };
2842
+ deployment: {
2843
+ reportStatus: {
2844
+ readonly annotations: {
2845
+ readonly destructiveHint: true;
2846
+ readonly openWorldHint: true;
2847
+ readonly readOnlyHint: false;
2848
+ };
2849
+ readonly description: "Report a deployment lifecycle status. A deployment's first success report evaluates global triggers asynchronously, and it is the only report that does: a trigger added or unpaused later does not make an already reported deployment evaluate again. Report that deployment under a new providerDeploymentId to evaluate it against the current triggers. The response contains the deployment only, not the resulting runs. This route requires an organization or user API key.";
2850
+ readonly input: z.ZodObject<{
2851
+ deployTarget: z.ZodOptional<z.ZodURL>;
2852
+ environment: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
2853
+ id: PublicIdSchema;
2854
+ }, z.core.$strict>, z.ZodObject<{
2855
+ baseEphemeralEnvironment: z.ZodOptional<z.ZodString>;
2856
+ ephemeral: z.ZodOptional<z.ZodBoolean>;
2857
+ name: z.ZodString;
2858
+ }, z.core.$strict>]>>;
2859
+ environmentVariables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2860
+ metadata: z.ZodOptional<z.ZodObject<{
2861
+ commitAuthorName: z.ZodOptional<z.ZodString>;
2862
+ commitMessage: z.ZodOptional<z.ZodString>;
2863
+ commitSha: z.ZodOptional<z.ZodString>;
2864
+ pullRequestNumber: z.ZodOptional<z.ZodNumber>;
2865
+ ref: z.ZodOptional<z.ZodString>;
2866
+ repository: z.ZodOptional<z.ZodString>;
2867
+ }, z.core.$strict>>;
2868
+ providerDeploymentId: z.ZodString;
2869
+ status: z.ZodEnum<{
2870
+ success: "success";
2871
+ pending: "pending";
2872
+ failure: "failure";
2873
+ inactive: "inactive";
2874
+ }>;
2875
+ workspaceId: PublicIdSchema;
2876
+ }, z.core.$strict>;
2877
+ readonly kind: "write";
2878
+ readonly name: "deployment.reportStatus";
2879
+ readonly output: z.ZodObject<{
2880
+ deployment: z.ZodObject<{
2881
+ id: PublicIdSchema;
2882
+ status: z.ZodEnum<{
2883
+ success: "success";
2884
+ pending: "pending";
2885
+ failure: "failure";
2886
+ inactive: "inactive";
2887
+ }>;
2888
+ url: z.ZodURL;
2889
+ }, z.core.$strip>;
2890
+ }, z.core.$strip>;
2891
+ };
2892
+ };
2647
2893
  email: {
2648
2894
  find: {
2649
2895
  readonly annotations: {
@@ -2885,6 +3131,7 @@ export declare const publicContractsV1: {
2885
3131
  running: "running";
2886
3132
  }>;
2887
3133
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3134
+ variablesUrl: z.ZodOptional<z.ZodURL>;
2888
3135
  url: z.ZodURL;
2889
3136
  }, z.core.$strip>;
2890
3137
  };
@@ -2898,6 +3145,7 @@ export declare const publicContractsV1: {
2898
3145
  readonly input: z.ZodObject<{
2899
3146
  environmentId: PublicIdSchema;
2900
3147
  name: z.ZodString;
3148
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2901
3149
  }, z.core.$strip>;
2902
3150
  readonly kind: "write";
2903
3151
  readonly name: "environment.deleteVariable";
@@ -2951,6 +3199,7 @@ export declare const publicContractsV1: {
2951
3199
  running: "running";
2952
3200
  }>;
2953
3201
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3202
+ variablesUrl: z.ZodOptional<z.ZodURL>;
2954
3203
  url: z.ZodURL;
2955
3204
  }, z.core.$strip>>;
2956
3205
  nextCursor: z.ZodOptional<z.ZodString>;
@@ -2965,6 +3214,7 @@ export declare const publicContractsV1: {
2965
3214
  readonly description: "Read a single environment's name, kind, standing run health, flow-code branch and reconciliation state, run concurrency limit, and termination state. If flowCodeBranch exists, use its syncStatus for Git reconciliation and read lastSyncedCommitHash only when syncStatus is reconciled.";
2966
3215
  readonly input: z.ZodObject<{
2967
3216
  environmentId: PublicIdSchema;
3217
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2968
3218
  }, z.core.$strip>;
2969
3219
  readonly kind: "read";
2970
3220
  readonly name: "environment.get";
@@ -2993,6 +3243,7 @@ export declare const publicContractsV1: {
2993
3243
  running: "running";
2994
3244
  }>;
2995
3245
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3246
+ variablesUrl: z.ZodOptional<z.ZodURL>;
2996
3247
  url: z.ZodURL;
2997
3248
  }, z.core.$strip>;
2998
3249
  };
@@ -3006,6 +3257,7 @@ export declare const publicContractsV1: {
3006
3257
  readonly input: z.ZodObject<{
3007
3258
  environmentId: PublicIdSchema;
3008
3259
  variableNames: z.ZodArray<z.ZodString>;
3260
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3009
3261
  }, z.core.$strip>;
3010
3262
  readonly kind: "read";
3011
3263
  readonly name: "environment.getVariable";
@@ -3026,6 +3278,7 @@ export declare const publicContractsV1: {
3026
3278
  readonly description: "Use this to answer which QA Wolf environment variables are available to test code. Returns names only; values never leave the server.";
3027
3279
  readonly input: z.ZodObject<{
3028
3280
  environmentId: PublicIdSchema;
3281
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3029
3282
  }, z.core.$strip>;
3030
3283
  readonly kind: "read";
3031
3284
  readonly name: "environment.listVariableNames";
@@ -3044,6 +3297,7 @@ export declare const publicContractsV1: {
3044
3297
  environmentId: PublicIdSchema;
3045
3298
  name: z.ZodString;
3046
3299
  value: z.ZodString;
3300
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3047
3301
  }, z.core.$strip>;
3048
3302
  readonly kind: "write";
3049
3303
  readonly name: "environment.setVariable";
@@ -3062,6 +3316,7 @@ export declare const publicContractsV1: {
3062
3316
  environmentId: PublicIdSchema;
3063
3317
  name: z.ZodOptional<z.ZodString>;
3064
3318
  runConcurrencyLimit: z.ZodOptional<z.ZodString>;
3319
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3065
3320
  }, z.core.$strip>;
3066
3321
  readonly kind: "write";
3067
3322
  readonly name: "environment.update";
@@ -3090,6 +3345,7 @@ export declare const publicContractsV1: {
3090
3345
  running: "running";
3091
3346
  }>;
3092
3347
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3348
+ variablesUrl: z.ZodOptional<z.ZodURL>;
3093
3349
  url: z.ZodURL;
3094
3350
  }, z.core.$strip>;
3095
3351
  };
@@ -3173,10 +3429,21 @@ export declare const publicContractsV1: {
3173
3429
  aiTaskId: z.ZodOptional<PublicIdSchema>;
3174
3430
  environmentId: PublicIdSchema;
3175
3431
  includeDrafts: z.ZodDefault<z.ZodBoolean>;
3432
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3176
3433
  }, z.core.$strip>;
3177
3434
  readonly kind: "read";
3178
3435
  readonly name: "flow.list";
3179
3436
  readonly output: z.ZodObject<{
3437
+ emptyReason: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
3438
+ type: z.ZodLiteral<"branch-never-reconciled">;
3439
+ }, z.core.$strip>, z.ZodObject<{
3440
+ type: z.ZodLiteral<"commit-has-no-flow-files">;
3441
+ }, z.core.$strip>, z.ZodObject<{
3442
+ hiddenDraftCount: z.ZodNumber;
3443
+ type: z.ZodLiteral<"every-flow-is-a-draft">;
3444
+ }, z.core.$strip>, z.ZodObject<{
3445
+ type: z.ZodLiteral<"no-flow-matched-the-listing">;
3446
+ }, z.core.$strip>], "type">>;
3180
3447
  flows: z.ZodArray<z.ZodObject<{
3181
3448
  executionTarget: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
3182
3449
  flowId: PublicIdSchema;
@@ -3628,6 +3895,7 @@ export declare const publicContractsV1: {
3628
3895
  ignoreRules: z.ZodDefault<z.ZodBoolean>;
3629
3896
  pullRequestNumber: z.ZodOptional<z.ZodNumber>;
3630
3897
  repository: z.ZodOptional<z.ZodString>;
3898
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3631
3899
  }, z.core.$strip>, z.ZodObject<{
3632
3900
  flowIds: z.ZodDefault<z.ZodArray<PublicIdSchema>>;
3633
3901
  tagNames: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -3714,6 +3982,7 @@ export declare const publicContractsV1: {
3714
3982
  readonly description: "List an environment's recent runs, newest first.";
3715
3983
  readonly input: z.ZodObject<{
3716
3984
  environmentId: PublicIdSchema;
3985
+ workspaceId: z.ZodOptional<PublicIdSchema>;
3717
3986
  cursor: z.ZodOptional<z.ZodString>;
3718
3987
  limit: z.ZodDefault<z.ZodNumber>;
3719
3988
  createdAfter: z.ZodOptional<z.ZodISODateTime>;
@@ -3934,18 +4203,23 @@ export declare const publicContractsV1: {
3934
4203
  readonly openWorldHint: false;
3935
4204
  readonly readOnlyHint: true;
3936
4205
  };
3937
- readonly description: "Report whether a runner is running under this id on the caller's team. This is a lookup: it never starts a runner, and it does not reset a runner's inactivity clock the way reading its journal does. An id that is not running is a success with `running: false` rather than an error, so this is how to check a runner is still there before addressing it.";
4206
+ readonly description: "Report whether a runner is running under this id on the caller's team. This is a lookup: it never starts a runner, and it does not reset a runner's inactivity clock the way reading its journal does. An id that is not running is a success with `running: false` rather than an error, so this is how to check a runner is still there before addressing it. A running runner also reports the `url` to watch it on, so an id alone is enough to recover the link to give the user.";
3938
4207
  readonly input: z.ZodObject<{
3939
4208
  id: z.ZodString;
3940
4209
  workspaceId: z.ZodOptional<PublicIdSchema>;
3941
4210
  }, z.core.$strip>;
3942
4211
  readonly kind: "read";
3943
4212
  readonly name: "runner.get";
3944
- readonly output: z.ZodObject<{
4213
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
3945
4214
  id: z.ZodString;
3946
4215
  outcome: z.ZodLiteral<"success">;
3947
- running: z.ZodBoolean;
3948
- }, z.core.$strip>;
4216
+ running: z.ZodLiteral<false>;
4217
+ }, z.core.$strip>, z.ZodObject<{
4218
+ id: z.ZodString;
4219
+ outcome: z.ZodLiteral<"success">;
4220
+ running: z.ZodLiteral<true>;
4221
+ url: z.ZodURL;
4222
+ }, z.core.$strip>], "running">;
3949
4223
  };
3950
4224
  highlightSelector: {
3951
4225
  readonly annotations: {
@@ -4268,7 +4542,7 @@ export declare const publicContractsV1: {
4268
4542
  readonly openWorldHint: false;
4269
4543
  readonly readOnlyHint: false;
4270
4544
  };
4271
- readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened.";
4545
+ readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. A success means the runner is answering: the call waits for the pod it started to come up, so the very next call to the runner reaches it. If the pod does not come up in time the call fails instead, leaving the runner running — launching the same id again attaches to it. After a successful launch, put the exact returned `url` in a normal user-visible assistant message so they can watch while the browser is driven. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
4272
4546
  readonly input: z.ZodObject<{
4273
4547
  id: z.ZodString;
4274
4548
  runnerName: z.ZodOptional<z.ZodEnum<{
@@ -4328,7 +4602,7 @@ export declare const publicContractsV1: {
4328
4602
  readonly openWorldHint: true;
4329
4603
  readonly readOnlyHint: false;
4330
4604
  };
4331
- 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. With `withScreenshot: true`, the answer also carries `imageJpegBase64`: a screenshot taken after the action, once the screen has changed from just before it or half a second has passed, whichever comes first. One call instead of `runner.performAction` followed by `runner.takeScreenshot`, with no fixed wait in between. Anything animating on the page counts as a change. The action itself is performed exactly as without the option; if the screen could serve no frame after it — a display restart, or a `navigate` on a desktop that is still starting — the action's result comes back without `imageJpegBase64`, so take a screenshot separately rather than repeating the action. On a mobile runner the screenshot is the device's own, taken right after a performed action. `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.";
4605
+ readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. One action per request, and the runner serves one at a time. 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. `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.";
4332
4606
  readonly input: z.ZodObject<{
4333
4607
  action: z.ZodDiscriminatedUnion<[z.ZodObject<{
4334
4608
  button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
@@ -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,cAAc,oBAAoB,CAAC;AAKnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAsB5D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEvB,MAAM,UAAU,CAAC;AAyClB,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,EAChD,aAAa,SAAS,cAAc,GAAG,cAAc,EACrD,SAAS,SAAS,cAAc,GAAG,cAAc,EAEjD,KAAK,iBAAiB,CACpB,aAAa,EACb,MAAM,EACN,KAAK,EACL,YAAY,EACZ,OAAO,EACP,WAAW,EACX,QAAQ,EACR,aAAa,EACb,SAAS,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFF,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}
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,cAAc,oBAAoB,CAAC;AAOnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAuB5D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEvB,MAAM,UAAU,CAAC;AAyClB,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,EAChD,aAAa,SAAS,cAAc,GAAG,cAAc,EACrD,SAAS,SAAS,cAAc,GAAG,cAAc,EAEjD,KAAK,iBAAiB,CACpB,aAAa,EACb,MAAM,EACN,KAAK,EACL,YAAY,EACZ,OAAO,EACP,WAAW,EACX,QAAQ,EACR,aAAa,EACb,SAAS,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FF,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}