@qawolf/api-contracts 0.59.0 → 0.64.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 (114) hide show
  1. package/dist/v1/agent/send.d.ts +2 -0
  2. package/dist/v1/agent/send.d.ts.map +1 -1
  3. package/dist/v1/agent/send.js +7 -0
  4. package/dist/v1/agent/send.js.map +1 -1
  5. package/dist/v1/deployment/index.d.ts +1 -1
  6. package/dist/v1/deployment/reportStatus.d.ts +1 -1
  7. package/dist/v1/deployment/reportStatus.js +2 -2
  8. package/dist/v1/deployment/reportStatus.js.map +1 -1
  9. package/dist/v1/environment/create.d.ts +1 -1
  10. package/dist/v1/environment/create.d.ts.map +1 -1
  11. package/dist/v1/environment/create.js.map +1 -1
  12. package/dist/v1/environment/deleteVariable.d.ts +1 -1
  13. package/dist/v1/environment/deleteVariable.d.ts.map +1 -1
  14. package/dist/v1/environment/deleteVariable.js.map +1 -1
  15. package/dist/v1/environment/getVariable.d.ts +1 -1
  16. package/dist/v1/environment/getVariable.d.ts.map +1 -1
  17. package/dist/v1/environment/getVariable.js.map +1 -1
  18. package/dist/v1/environment/index.d.ts +3 -3
  19. package/dist/v1/environment/index.d.ts.map +1 -1
  20. package/dist/v1/environment/index.js.map +1 -1
  21. package/dist/v1/environment/update.d.ts +1 -1
  22. package/dist/v1/environment/update.d.ts.map +1 -1
  23. package/dist/v1/environment/update.js.map +1 -1
  24. package/dist/v1/flow/addTag.d.ts.map +1 -1
  25. package/dist/v1/flow/addTag.js +0 -1
  26. package/dist/v1/flow/addTag.js.map +1 -1
  27. package/dist/v1/ids.d.ts +4 -3
  28. package/dist/v1/ids.d.ts.map +1 -1
  29. package/dist/v1/ids.js +4 -1
  30. package/dist/v1/ids.js.map +1 -1
  31. package/dist/v1/index.d.ts +1369 -379
  32. package/dist/v1/index.d.ts.map +1 -1
  33. package/dist/v1/index.js +11 -49
  34. package/dist/v1/index.js.map +1 -1
  35. package/dist/v1/legacyTrigger/find.d.ts +89 -0
  36. package/dist/v1/legacyTrigger/find.d.ts.map +1 -0
  37. package/dist/v1/legacyTrigger/find.js +35 -0
  38. package/dist/v1/legacyTrigger/find.js.map +1 -0
  39. package/dist/v1/legacyTrigger/index.d.ts +129 -0
  40. package/dist/v1/legacyTrigger/index.d.ts.map +1 -0
  41. package/dist/v1/legacyTrigger/index.js +13 -0
  42. package/dist/v1/legacyTrigger/index.js.map +1 -0
  43. package/dist/v1/legacyTrigger/lifecycle.d.ts +41 -0
  44. package/dist/v1/legacyTrigger/lifecycle.d.ts.map +1 -0
  45. package/dist/v1/legacyTrigger/lifecycle.js +46 -0
  46. package/dist/v1/legacyTrigger/lifecycle.js.map +1 -0
  47. package/dist/v1/legacyTrigger/resource.d.ts +68 -0
  48. package/dist/v1/legacyTrigger/resource.d.ts.map +1 -0
  49. package/dist/v1/legacyTrigger/resource.js +66 -0
  50. package/dist/v1/legacyTrigger/resource.js.map +1 -0
  51. package/dist/v1/mcpToolDescription.d.ts.map +1 -1
  52. package/dist/v1/mcpToolDescription.js +2 -1
  53. package/dist/v1/mcpToolDescription.js.map +1 -1
  54. package/dist/v1/run/triage.d.ts +51 -0
  55. package/dist/v1/run/triage.d.ts.map +1 -0
  56. package/dist/v1/run/triage.js +55 -0
  57. package/dist/v1/run/triage.js.map +1 -0
  58. package/dist/v1/runner/actionSequence.d.ts +12 -0
  59. package/dist/v1/runner/actionSequence.d.ts.map +1 -0
  60. package/dist/v1/runner/actionSequence.js +11 -0
  61. package/dist/v1/runner/actionSequence.js.map +1 -0
  62. package/dist/v1/runner/catalog.d.ts +920 -0
  63. package/dist/v1/runner/catalog.d.ts.map +1 -0
  64. package/dist/v1/runner/catalog.js +36 -0
  65. package/dist/v1/runner/catalog.js.map +1 -0
  66. package/dist/v1/runner/performActions.d.ts +124 -0
  67. package/dist/v1/runner/performActions.d.ts.map +1 -0
  68. package/dist/v1/runner/performActions.js +83 -0
  69. package/dist/v1/runner/performActions.js.map +1 -0
  70. package/dist/v1/runner/performActionsSteps.d.ts +85 -0
  71. package/dist/v1/runner/performActionsSteps.d.ts.map +1 -0
  72. package/dist/v1/runner/performActionsSteps.js +80 -0
  73. package/dist/v1/runner/performActionsSteps.js.map +1 -0
  74. package/dist/v1/runner/recording.d.ts +332 -0
  75. package/dist/v1/runner/recording.d.ts.map +1 -0
  76. package/dist/v1/runner/recording.js +113 -0
  77. package/dist/v1/runner/recording.js.map +1 -0
  78. package/dist/v1/runnerReexports.d.ts +3 -0
  79. package/dist/v1/runnerReexports.d.ts.map +1 -1
  80. package/dist/v1/runnerReexports.js +3 -0
  81. package/dist/v1/runnerReexports.js.map +1 -1
  82. package/dist/v1/skill/index.d.ts +82 -0
  83. package/dist/v1/skill/index.d.ts.map +1 -0
  84. package/dist/v1/skill/index.js +63 -0
  85. package/dist/v1/skill/index.js.map +1 -0
  86. package/dist/v1/trigger/configuration.d.ts +20 -0
  87. package/dist/v1/trigger/configuration.d.ts.map +1 -1
  88. package/dist/v1/trigger/configuration.js +17 -3
  89. package/dist/v1/trigger/configuration.js.map +1 -1
  90. package/dist/v1/trigger/configurationRules.d.ts +2 -1
  91. package/dist/v1/trigger/configurationRules.d.ts.map +1 -1
  92. package/dist/v1/trigger/configurationRules.js +37 -21
  93. package/dist/v1/trigger/configurationRules.js.map +1 -1
  94. package/dist/v1/trigger/create.d.ts +20 -0
  95. package/dist/v1/trigger/create.d.ts.map +1 -1
  96. package/dist/v1/trigger/find.d.ts +10 -0
  97. package/dist/v1/trigger/find.d.ts.map +1 -1
  98. package/dist/v1/trigger/get.d.ts +10 -0
  99. package/dist/v1/trigger/get.d.ts.map +1 -1
  100. package/dist/v1/trigger/index.d.ts +578 -0
  101. package/dist/v1/trigger/index.d.ts.map +1 -1
  102. package/dist/v1/trigger/index.js +14 -0
  103. package/dist/v1/trigger/index.js.map +1 -1
  104. package/dist/v1/trigger/lifecycle.d.ts +20 -0
  105. package/dist/v1/trigger/lifecycle.d.ts.map +1 -1
  106. package/dist/v1/trigger/resource.d.ts +10 -0
  107. package/dist/v1/trigger/resource.d.ts.map +1 -1
  108. package/dist/v1/trigger/update.d.ts +20 -0
  109. package/dist/v1/trigger/update.d.ts.map +1 -1
  110. package/package.json +1 -1
  111. package/dist/v1/automate/index.d.ts +0 -24
  112. package/dist/v1/automate/index.d.ts.map +0 -1
  113. package/dist/v1/automate/index.js +0 -39
  114. package/dist/v1/automate/index.js.map +0 -1
@@ -11,7 +11,7 @@ export type PublicApiOutput<Api extends AnyPublicApiContract> = z.infer<Api["out
11
11
  * the same factory with its own strict id schemas, so the contract shape can
12
12
  * never drift between the two while validation strictness stays server-owned.
13
13
  */
14
- export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, FlowId extends PublicIdSchema, RunId extends PublicIdSchema, AutomationId extends PublicIdSchema = PublicIdSchema, IssueId extends PublicIdSchema = PublicIdSchema, WorkspaceId extends PublicIdSchema = PublicIdSchema, AiTaskId extends PublicIdSchema = PublicIdSchema, ChatSessionId extends PublicIdSchema = PublicIdSchema, TriggerId extends PublicIdSchema = PublicIdSchema, DeploymentId extends PublicIdSchema = PublicIdSchema>(ids: PublicIdSchemasOf<EnvironmentId, FlowId, RunId, AutomationId, IssueId, WorkspaceId, AiTaskId, ChatSessionId, TriggerId, DeploymentId>) => {
14
+ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, FlowId extends PublicIdSchema, RunId extends PublicIdSchema, IssueId extends PublicIdSchema = PublicIdSchema, WorkspaceId extends PublicIdSchema = PublicIdSchema, AiTaskId extends PublicIdSchema = PublicIdSchema, ChatSessionId extends PublicIdSchema = PublicIdSchema, TriggerId extends PublicIdSchema = PublicIdSchema, DeploymentId extends PublicIdSchema = PublicIdSchema, LegacyTriggerId extends PublicIdSchema = PublicIdSchema>(ids: PublicIdSchemasOf<EnvironmentId, FlowId, RunId, IssueId, WorkspaceId, AiTaskId, ChatSessionId, TriggerId, DeploymentId, LegacyTriggerId>) => {
15
15
  agent: {
16
16
  get: {
17
17
  readonly annotations: {
@@ -62,6 +62,8 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
62
62
  environmentId: z.ZodOptional<PublicIdSchema>;
63
63
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
64
64
  message: z.ZodString;
65
+ parentSessionId: z.ZodOptional<ChatSessionId>;
66
+ runnerId: z.ZodOptional<z.ZodString>;
65
67
  sessionId: z.ZodOptional<ChatSessionId>;
66
68
  workspaceId: z.ZodOptional<WorkspaceId>;
67
69
  }, z.core.$strip>;
@@ -80,27 +82,6 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
80
82
  }, z.core.$strip>;
81
83
  };
82
84
  };
83
- automate: {
84
- readonly annotations: {
85
- readonly destructiveHint: true;
86
- readonly openWorldHint: true;
87
- readonly readOnlyHint: false;
88
- };
89
- readonly description: "Request automation for draft flows. First create a named local .flow.ts draft for every requested journey that does not already have a matching draft; never reuse a generic starter or placeholder. Each new draft must start with a JSDoc Goal: description, import flow from @qawolf/flows/web, and use export default flow(...); a comment-only file or direct test(...) call is not a valid draft. Commit and push all changes with Git to publish them, then list remote drafts to resolve every selected ID. Do not use patch to create or rename a selected flow. Finally make one automation request containing all requested flow IDs.";
90
- readonly input: z.ZodObject<{
91
- aiTaskId: z.ZodOptional<AiTaskId>;
92
- environmentId: PublicIdSchema;
93
- flowIds: z.ZodArray<FlowId>;
94
- patch: z.ZodOptional<z.ZodString>;
95
- workspaceId: z.ZodOptional<WorkspaceId>;
96
- }, z.core.$strip>;
97
- readonly kind: "write";
98
- readonly name: "automate";
99
- readonly output: z.ZodObject<{
100
- automationId: AutomationId;
101
- url: z.ZodURL;
102
- }, z.core.$strip>;
103
- };
104
85
  codeHostIntegration: {
105
86
  find: {
106
87
  readonly annotations: {
@@ -295,7 +276,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
295
276
  readonly openWorldHint: true;
296
277
  readonly readOnlyHint: false;
297
278
  };
298
- 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.";
279
+ 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.";
299
280
  readonly input: z.ZodObject<{
300
281
  deployTarget: z.ZodOptional<z.ZodURL>;
301
282
  environment: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
@@ -1328,6 +1309,124 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1328
1309
  }, z.core.$strip>;
1329
1310
  };
1330
1311
  };
1312
+ legacyTrigger: {
1313
+ find: {
1314
+ readonly annotations: {
1315
+ readonly destructiveHint: false;
1316
+ readonly openWorldHint: false;
1317
+ readonly readOnlyHint: true;
1318
+ };
1319
+ readonly description: string;
1320
+ readonly input: z.ZodObject<{
1321
+ kind: z.ZodDefault<z.ZodEnum<{
1322
+ static: "static";
1323
+ active: "active";
1324
+ all: "all";
1325
+ }>>;
1326
+ workspaceId: z.ZodOptional<WorkspaceId>;
1327
+ }, z.core.$strip>;
1328
+ readonly kind: "read";
1329
+ readonly name: "legacyTrigger.find";
1330
+ readonly output: z.ZodObject<{
1331
+ legacyTriggers: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
1332
+ nextAt: z.ZodOptional<z.ZodISODateTime>;
1333
+ repeatMinutes: z.ZodNumber;
1334
+ startAt: z.ZodOptional<z.ZodISODateTime>;
1335
+ timezoneId: z.ZodOptional<z.ZodString>;
1336
+ type: z.ZodLiteral<"scheduled">;
1337
+ environment: z.ZodObject<{
1338
+ id: EnvironmentId;
1339
+ kind: z.ZodEnum<{
1340
+ static: "static";
1341
+ preview: "preview";
1342
+ }>;
1343
+ name: z.ZodString;
1344
+ terminatedAt: z.ZodOptional<z.ZodISODateTime>;
1345
+ }, z.core.$strip>;
1346
+ id: LegacyTriggerId;
1347
+ isPaused: z.ZodBoolean;
1348
+ name: z.ZodString;
1349
+ pausedAt: z.ZodOptional<z.ZodISODateTime>;
1350
+ tags: z.ZodArray<z.ZodObject<{
1351
+ id: z.ZodString;
1352
+ name: z.ZodString;
1353
+ }, z.core.$strip>>;
1354
+ }, z.core.$strip>, z.ZodObject<{
1355
+ adaptiveFlowSelection: z.ZodBoolean;
1356
+ branchScope: z.ZodUnion<readonly [z.ZodObject<{
1357
+ kind: z.ZodLiteral<"all-branches">;
1358
+ }, z.core.$strip>, z.ZodObject<{
1359
+ caseSensitiveGlobs: z.ZodArray<z.ZodString>;
1360
+ kind: z.ZodLiteral<"listed-branches">;
1361
+ negated: z.ZodBoolean;
1362
+ raw: z.ZodString;
1363
+ }, z.core.$strip>]>;
1364
+ codeHostingServiceRepository: z.ZodUnion<readonly [z.ZodObject<{
1365
+ kind: z.ZodLiteral<"any">;
1366
+ }, z.core.$strip>, z.ZodObject<{
1367
+ kind: z.ZodLiteral<"none">;
1368
+ }, z.core.$strip>, z.ZodObject<{
1369
+ id: z.ZodString;
1370
+ kind: z.ZodLiteral<"by-id">;
1371
+ }, z.core.$strip>]>;
1372
+ deploymentPrLabel: z.ZodOptional<z.ZodString>;
1373
+ deploymentType: z.ZodOptional<z.ZodString>;
1374
+ type: z.ZodUnion<readonly [z.ZodLiteral<"generic">, z.ZodLiteral<"pr-testing-button">]>;
1375
+ environment: z.ZodObject<{
1376
+ id: EnvironmentId;
1377
+ kind: z.ZodEnum<{
1378
+ static: "static";
1379
+ preview: "preview";
1380
+ }>;
1381
+ name: z.ZodString;
1382
+ terminatedAt: z.ZodOptional<z.ZodISODateTime>;
1383
+ }, z.core.$strip>;
1384
+ id: LegacyTriggerId;
1385
+ isPaused: z.ZodBoolean;
1386
+ name: z.ZodString;
1387
+ pausedAt: z.ZodOptional<z.ZodISODateTime>;
1388
+ tags: z.ZodArray<z.ZodObject<{
1389
+ id: z.ZodString;
1390
+ name: z.ZodString;
1391
+ }, z.core.$strip>>;
1392
+ }, z.core.$strip>]>>;
1393
+ }, z.core.$strip>;
1394
+ };
1395
+ pause: {
1396
+ readonly annotations: {
1397
+ readonly destructiveHint: true;
1398
+ readonly openWorldHint: false;
1399
+ readonly readOnlyHint: false;
1400
+ };
1401
+ readonly description: string;
1402
+ readonly input: z.ZodObject<{
1403
+ legacyTriggerId: LegacyTriggerId;
1404
+ }, z.core.$strip>;
1405
+ readonly kind: "write";
1406
+ readonly name: "legacyTrigger.pause";
1407
+ readonly output: z.ZodObject<{
1408
+ isPaused: z.ZodBoolean;
1409
+ legacyTriggerId: LegacyTriggerId;
1410
+ }, z.core.$strip>;
1411
+ };
1412
+ resume: {
1413
+ readonly annotations: {
1414
+ readonly destructiveHint: true;
1415
+ readonly openWorldHint: true;
1416
+ readonly readOnlyHint: false;
1417
+ };
1418
+ readonly description: string;
1419
+ readonly input: z.ZodObject<{
1420
+ legacyTriggerId: LegacyTriggerId;
1421
+ }, z.core.$strip>;
1422
+ readonly kind: "write";
1423
+ readonly name: "legacyTrigger.resume";
1424
+ readonly output: z.ZodObject<{
1425
+ isPaused: z.ZodBoolean;
1426
+ legacyTriggerId: LegacyTriggerId;
1427
+ }, z.core.$strip>;
1428
+ };
1429
+ };
1331
1430
  run: {
1332
1431
  create: {
1333
1432
  readonly annotations: {
@@ -1612,178 +1711,454 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1612
1711
  url: z.ZodURL;
1613
1712
  }, z.core.$strip>;
1614
1713
  };
1714
+ triage: {
1715
+ readonly annotations: {
1716
+ readonly destructiveHint: false;
1717
+ readonly openWorldHint: false;
1718
+ readonly readOnlyHint: true;
1719
+ };
1720
+ readonly description: string;
1721
+ readonly input: z.ZodObject<{
1722
+ flowId: FlowId;
1723
+ runId: RunId;
1724
+ }, z.core.$strip>;
1725
+ readonly kind: "read";
1726
+ readonly name: "run.triage";
1727
+ readonly output: z.ZodObject<{
1728
+ answers: z.ZodObject<{
1729
+ verdict: z.ZodObject<{
1730
+ choice: z.ZodEnum<{
1731
+ bug: "bug";
1732
+ maintenance: "maintenance";
1733
+ }>;
1734
+ confidence: z.ZodNumber;
1735
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
1736
+ type: z.ZodLiteral<"choice">;
1737
+ }, z.core.$strip>;
1738
+ }, z.core.$strip>;
1739
+ decision: z.ZodDiscriminatedUnion<[z.ZodObject<{
1740
+ diagnosis: z.ZodEnum<{
1741
+ bug: "bug";
1742
+ maintenance: "maintenance";
1743
+ }>;
1744
+ type: z.ZodLiteral<"diagnose">;
1745
+ }, z.core.$strip>, z.ZodObject<{
1746
+ diagnosis: z.ZodEnum<{
1747
+ bug: "bug";
1748
+ maintenance: "maintenance";
1749
+ }>;
1750
+ type: z.ZodLiteral<"suggest">;
1751
+ }, z.core.$strip>, z.ZodObject<{
1752
+ type: z.ZodLiteral<"needsHuman">;
1753
+ }, z.core.$strip>], "type">;
1754
+ model: z.ZodString;
1755
+ state: z.ZodJSONSchema;
1756
+ }, z.core.$strip>;
1757
+ };
1615
1758
  };
1616
1759
  runner: {
1617
- evaluateSnippet: {
1760
+ runFlow: {
1618
1761
  readonly annotations: {
1619
1762
  readonly destructiveHint: true;
1620
1763
  readonly openWorldHint: true;
1621
1764
  readonly readOnlyHint: false;
1622
1765
  };
1623
- readonly description: "Evaluate a snippet against whatever the runner's browser is showing right now. Answers whether the snippet ran, and its error if it threw — not the value it evaluated to, so read anything you want back out of the runner's journal (a snippet's `console.log` lands in the `console` stream). A snippet starts no run and leaves no run-scoped journal entries of its own. `runner-cannot-evaluate-snippets` on a runner with nothing attached to serve one — which will never clear, so check that the runner you launched is one that runs a browser or app before retrying. `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. Neither is proof the snippet did not run: a snippet that outlives the answer window is still executing when you read this, so do not blindly resubmit one that mutates what the page is looking at.";
1766
+ readonly description: "Run a flow on an interactive runner. When `selection` is given the lines run against the browser as it stands, so nothing is re-navigated and nothing is signed in again; without it the whole entry point runs from a fresh browser. A runner with no live browser starts one before a selection and says so with `bootstrappedRunner`, which means those lines ran against a fresh page rather than the one an earlier run left. A selection produces no `runStarted` event, so follow it by its run id on `run-status` like any other run. Send `unchangedFiles` to ship only what changed since an earlier run on this runner; a `needs-full-sync` failure names the paths it does not hold, and the way to recover is the same run again with every file in `files`. Answers as soon as the run is accepted, with the id to follow it by — nothing waits for the run to finish. Which browser or device the run needs is read from the flow file's own execution target, so it is not supplied here; when it does not match what the runner is, the call fails with `runner-target-mismatch` rather than failing partway through the run. `runner-unreachable` means the answer did not arrive, which is NOT the same as the run not having started: the runner may have accepted it and been too slow to say so, and resubmitting would start a second run that is billed and journalled alongside the first. Read the runner's `run-status` journal stream before resubmitting, and use the newest run id there if one appeared.";
1624
1767
  readonly input: z.ZodObject<{
1625
- code: z.ZodString;
1626
- filePath: z.ZodOptional<z.ZodString>;
1627
- files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1768
+ entryPointPath: z.ZodString;
1769
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1770
+ environmentId: z.ZodOptional<PublicIdSchema>;
1771
+ files: z.ZodRecord<z.ZodString, z.ZodString>;
1628
1772
  id: z.ZodString;
1773
+ selection: z.ZodOptional<z.ZodObject<{
1774
+ endLine: z.ZodInt;
1775
+ path: z.ZodString;
1776
+ startLine: z.ZodInt;
1777
+ }, z.core.$strip>>;
1778
+ unchangedFiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1629
1779
  workspaceId: z.ZodOptional<WorkspaceId>;
1630
1780
  }, z.core.$strip>;
1631
1781
  readonly kind: "write";
1632
- readonly name: "runner.evaluateSnippet";
1782
+ readonly name: "runner.runFlow";
1633
1783
  readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1634
- errorMessage: z.ZodOptional<z.ZodString>;
1784
+ bootstrappedRunner: z.ZodOptional<z.ZodBoolean>;
1635
1785
  outcome: z.ZodLiteral<"success">;
1636
- result: z.ZodEnum<{
1637
- success: "success";
1638
- error: "error";
1639
- stopped: "stopped";
1786
+ runId: z.ZodString;
1787
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
1788
+ failureReason: z.ZodLiteral<"runner-target-mismatch">;
1789
+ outcome: z.ZodLiteral<"failure">;
1790
+ requiredRunnerName: z.ZodEnum<{
1791
+ basic: "basic";
1792
+ playwright: "playwright";
1793
+ android: "android";
1794
+ ios: "ios";
1640
1795
  }>;
1641
- }, z.core.$strip>, z.ZodObject<{
1642
- failureReason: z.ZodEnum<{
1643
- "runner-cannot-evaluate-snippets": "runner-cannot-evaluate-snippets";
1644
- "runner-unreachable": "runner-unreachable";
1796
+ runnerName: z.ZodEnum<{
1797
+ basic: "basic";
1798
+ playwright: "playwright";
1799
+ android: "android";
1800
+ ios: "ios";
1645
1801
  }>;
1802
+ }, z.core.$strip>, z.ZodObject<{
1803
+ failureReason: z.ZodLiteral<"needs-full-sync">;
1804
+ missingPaths: z.ZodArray<z.ZodString>;
1646
1805
  outcome: z.ZodLiteral<"failure">;
1647
- }, z.core.$strip>], "outcome">;
1648
- };
1649
- get: {
1650
- readonly annotations: {
1651
- readonly destructiveHint: false;
1652
- readonly openWorldHint: false;
1653
- readonly readOnlyHint: true;
1654
- };
1655
- 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.";
1656
- readonly input: z.ZodObject<{
1657
- id: z.ZodString;
1658
- workspaceId: z.ZodOptional<WorkspaceId>;
1659
- }, z.core.$strip>;
1660
- readonly kind: "read";
1661
- readonly name: "runner.get";
1662
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1663
- id: z.ZodString;
1664
- outcome: z.ZodLiteral<"success">;
1665
- running: z.ZodLiteral<false>;
1666
1806
  }, z.core.$strip>, z.ZodObject<{
1667
- id: z.ZodString;
1668
- outcome: z.ZodLiteral<"success">;
1669
- running: z.ZodLiteral<true>;
1670
- url: z.ZodURL;
1671
- }, z.core.$strip>], "running">;
1807
+ failureReason: z.ZodLiteral<"runner-unreachable">;
1808
+ outcome: z.ZodLiteral<"failure">;
1809
+ }, z.core.$strip>], "failureReason">], "outcome">;
1672
1810
  };
1673
- highlightSelector: {
1811
+ stopRun: {
1674
1812
  readonly annotations: {
1675
- readonly destructiveHint: false;
1813
+ readonly destructiveHint: true;
1676
1814
  readonly openWorldHint: false;
1677
1815
  readonly readOnlyHint: false;
1678
1816
  };
1679
- readonly description: "Highlight the elements a selector matches on an interactive runner's live page, and answer how many it matched. The highlight stays until it is replaced or cleared, so it is visible in the next `runner.takeScreenshot` — which is the point, since a caller cannot see the runner's screen otherwise. Send an empty selector to clear, which answers `cleared`. `status` tells a selector that matched nothing (`empty`) from one the page could not parse (`invalid`), so a caller can tell a bad locator from a locator pointing at nothing. `no-answer` if the page did not answer in time: the highlight runs inside the page, so a page that is gone or mid-navigation does not answer slowly, it does not answer at all. `runner-cannot-highlight-selectors` on a runner with no browser to draw on. `runner-unreachable` if the runner could not be reached: it may still be starting, or it may have terminated after inactivity.";
1817
+ readonly description: "Stop what a runner is currently executing, leaving the runner up and its browser on whatever page the run reached. Succeeds whether or not anything was running, and `wasRunning` says which. This is the counterpart of `runner.terminate`, which ends the runner itself. The run stops where it is, so the journal's `run-status` settles it as stopped rather than passed or failed. `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. The stop may still have landed, but stopping a runner that is already idle does nothing, so retrying is safe.";
1680
1818
  readonly input: z.ZodObject<{
1681
1819
  id: z.ZodString;
1682
- selector: z.ZodString;
1683
1820
  workspaceId: z.ZodOptional<WorkspaceId>;
1684
1821
  }, z.core.$strip>;
1685
1822
  readonly kind: "write";
1686
- readonly name: "runner.highlightSelector";
1823
+ readonly name: "runner.stopRun";
1687
1824
  readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1688
- matchCount: z.ZodNumber;
1689
1825
  outcome: z.ZodLiteral<"success">;
1690
- selector: z.ZodString;
1691
- status: z.ZodLiteral<"valid" | "invalid" | "empty">;
1692
- targetPage: z.ZodOptional<z.ZodString>;
1693
- }, z.core.$strip>, z.ZodObject<{
1694
- outcome: z.ZodLiteral<"cleared">;
1826
+ wasRunning: z.ZodBoolean;
1695
1827
  }, z.core.$strip>, z.ZodObject<{
1696
- errorMessage: z.ZodOptional<z.ZodString>;
1697
1828
  failureReason: z.ZodEnum<{
1698
1829
  "runner-unreachable": "runner-unreachable";
1699
- "no-answer": "no-answer";
1700
- "runner-cannot-highlight-selectors": "runner-cannot-highlight-selectors";
1701
1830
  }>;
1702
1831
  outcome: z.ZodLiteral<"failure">;
1703
1832
  }, z.core.$strip>], "outcome">;
1704
1833
  };
1705
- importPackage: {
1834
+ takeScreenshot: {
1706
1835
  readonly annotations: {
1707
- readonly destructiveHint: true;
1708
- readonly openWorldHint: true;
1836
+ readonly destructiveHint: false;
1837
+ readonly openWorldHint: false;
1709
1838
  readonly readOnlyHint: false;
1710
1839
  };
1711
- readonly description: "Install a package into an interactive runner's live run and import it, so a snippet or a selection can use it without a full run to reinstall dependencies. An `install-failed` failure carries npm's reason in `errorMessage`. `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. The install may still have landed, but installing the same version again does nothing, so retrying is safe.";
1840
+ 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; this refreshes the inactivity timer and can extend the runner's billed lifetime. 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.";
1712
1841
  readonly input: z.ZodObject<{
1713
1842
  id: z.ZodString;
1714
- npmDependencies: z.ZodRecord<z.ZodString, z.ZodString>;
1715
- packageName: z.ZodString;
1716
- packageVersion: z.ZodString;
1717
1843
  workspaceId: z.ZodOptional<WorkspaceId>;
1718
1844
  }, z.core.$strip>;
1719
- readonly kind: "write";
1720
- readonly name: "runner.importPackage";
1845
+ readonly kind: "read";
1846
+ readonly name: "runner.takeScreenshot";
1721
1847
  readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1848
+ imageJpegBase64: z.ZodString;
1722
1849
  outcome: z.ZodLiteral<"success">;
1723
1850
  }, z.core.$strip>, z.ZodObject<{
1724
- errorMessage: z.ZodOptional<z.ZodString>;
1725
1851
  failureReason: z.ZodEnum<{
1726
1852
  "runner-unreachable": "runner-unreachable";
1727
- "install-failed": "install-failed";
1853
+ "screen-needs-a-run": "screen-needs-a-run";
1854
+ "screen-not-ready": "screen-not-ready";
1855
+ "runner-has-no-screen": "runner-has-no-screen";
1728
1856
  }>;
1729
1857
  outcome: z.ZodLiteral<"failure">;
1730
1858
  }, z.core.$strip>], "outcome">;
1731
1859
  };
1732
- inspect: {
1860
+ terminate: {
1733
1861
  readonly annotations: {
1734
- readonly destructiveHint: false;
1862
+ readonly destructiveHint: true;
1735
1863
  readonly openWorldHint: false;
1736
1864
  readonly readOnlyHint: false;
1737
1865
  };
1738
- readonly description: string;
1866
+ readonly description: "End an interactive runner on the caller's team, and the pod it runs on with it. Terminating a runner that is not running succeeds and reports `wasRunning: false`. This ends the runner: use `runner.stopRun` to stop what a runner is currently executing while leaving the runner up.";
1739
1867
  readonly input: z.ZodObject<{
1740
1868
  id: z.ZodString;
1741
- request: z.ZodDiscriminatedUnion<[z.ZodObject<{
1742
- selector: z.ZodString;
1743
- what: z.ZodLiteral<"element-html">;
1744
- }, z.core.$strip>, z.ZodObject<{
1745
- selector: z.ZodOptional<z.ZodString>;
1746
- what: z.ZodLiteral<"page-html">;
1747
- }, z.core.$strip>, z.ZodObject<{
1748
- variableName: z.ZodString;
1749
- what: z.ZodLiteral<"variable">;
1750
- }, z.core.$strip>], "what">;
1751
1869
  workspaceId: z.ZodOptional<WorkspaceId>;
1752
1870
  }, z.core.$strip>;
1753
- readonly kind: "read";
1754
- readonly name: "runner.inspect";
1755
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
1871
+ readonly kind: "write";
1872
+ readonly name: "runner.terminate";
1873
+ readonly output: z.ZodObject<{
1874
+ id: z.ZodString;
1756
1875
  outcome: z.ZodLiteral<"success">;
1757
- value: z.ZodString;
1758
- }, z.core.$strip>, z.ZodObject<{
1759
- errorMessage: z.ZodOptional<z.ZodString>;
1760
- failureReason: z.ZodEnum<{
1761
- "runner-unreachable": "runner-unreachable";
1762
- "nothing-to-inspect": "nothing-to-inspect";
1763
- "runner-is-not-a-browser": "runner-is-not-a-browser";
1764
- }>;
1765
- outcome: z.ZodLiteral<"failure">;
1766
- }, z.core.$strip>], "outcome">;
1876
+ wasRunning: z.ZodBoolean;
1877
+ }, z.core.$strip>;
1767
1878
  };
1768
- inspectMobile: {
1879
+ record: {
1769
1880
  readonly annotations: {
1770
1881
  readonly destructiveHint: false;
1771
1882
  readonly openWorldHint: false;
1772
- readonly readOnlyHint: true;
1883
+ readonly readOnlyHint: false;
1773
1884
  };
1774
- 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, carrying some text, or matching a selector. This does not refresh the runner's inactivity timer. 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 an `android` or `ios` runner instead. `invalid-selector` (elements by selector only) means the selector itself could not be parsed under the given `strategy` — distinct from a selector that parsed fine but matched nothing, which answers `matches: []` 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.";
1885
+ readonly description: "Control video recording on a Playwright runner. Start requires a caller-generated UUID; stop targets that UUID so retries cannot stop a later recording. Manual capture spans runs and suppresses automatic capture. Auto settings affect subsequent full runs. The URL opens recording history after the runner terminates. Videos may be unavailable after abrupt pod loss.";
1775
1886
  readonly input: z.ZodObject<{
1887
+ command: z.ZodDiscriminatedUnion<[z.ZodObject<{
1888
+ action: z.ZodLiteral<"start">;
1889
+ recordingId: z.ZodUUID;
1890
+ }, z.core.$strict>, z.ZodObject<{
1891
+ action: z.ZodLiteral<"stop">;
1892
+ recordingId: z.ZodUUID;
1893
+ }, z.core.$strict>, z.ZodObject<{
1894
+ action: z.ZodLiteral<"auto">;
1895
+ enabled: z.ZodBoolean;
1896
+ }, z.core.$strict>, z.ZodObject<{
1897
+ action: z.ZodLiteral<"status">;
1898
+ }, z.core.$strict>], "action">;
1776
1899
  id: z.ZodString;
1777
- request: z.ZodDiscriminatedUnion<[z.ZodObject<{
1778
- what: z.ZodLiteral<"session">;
1779
- }, z.core.$strip>, z.ZodObject<{
1780
- what: z.ZodLiteral<"contexts">;
1781
- }, z.core.$strip>, z.ZodObject<{
1782
- context: z.ZodOptional<z.ZodString>;
1783
- what: z.ZodLiteral<"page">;
1784
- }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
1785
- by: z.ZodLiteral<"point">;
1786
- context: z.ZodOptional<z.ZodString>;
1900
+ workspaceId: z.ZodOptional<WorkspaceId>;
1901
+ }, z.core.$strip>;
1902
+ readonly kind: "write";
1903
+ readonly name: "runner.record";
1904
+ readonly output: z.ZodObject<{
1905
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
1906
+ outcome: z.ZodLiteral<"success">;
1907
+ recording: z.ZodOptional<z.ZodObject<{
1908
+ endedAt: z.ZodISODateTime;
1909
+ id: z.ZodUUID;
1910
+ mode: z.ZodEnum<{
1911
+ manual: "manual";
1912
+ automatic: "automatic";
1913
+ }>;
1914
+ runIds: z.ZodArray<z.ZodString>;
1915
+ runnerId: z.ZodString;
1916
+ runnerInstanceId: z.ZodUUID;
1917
+ startedAt: z.ZodISODateTime;
1918
+ status: z.ZodEnum<{
1919
+ failed: "failed";
1920
+ ready: "ready";
1921
+ }>;
1922
+ version: z.ZodLiteral<1>;
1923
+ }, z.core.$strip>>;
1924
+ state: z.ZodObject<{
1925
+ active: z.ZodOptional<z.ZodObject<{
1926
+ id: z.ZodUUID;
1927
+ mode: z.ZodEnum<{
1928
+ manual: "manual";
1929
+ automatic: "automatic";
1930
+ }>;
1931
+ startedAt: z.ZodISODateTime;
1932
+ }, z.core.$strip>>;
1933
+ auto: z.ZodEnum<{
1934
+ default: "default";
1935
+ on: "on";
1936
+ off: "off";
1937
+ }>;
1938
+ }, z.core.$strip>;
1939
+ }, z.core.$strip>, z.ZodObject<{
1940
+ failureReason: z.ZodEnum<{
1941
+ "runner-unreachable": "runner-unreachable";
1942
+ "screen-not-ready": "screen-not-ready";
1943
+ unsupported: "unsupported";
1944
+ "recording-in-progress": "recording-in-progress";
1945
+ "recording-not-found": "recording-not-found";
1946
+ "recording-id-used": "recording-id-used";
1947
+ "recording-failed": "recording-failed";
1948
+ }>;
1949
+ outcome: z.ZodLiteral<"failure">;
1950
+ }, z.core.$strip>], "outcome">;
1951
+ url: z.ZodURL;
1952
+ }, z.core.$strip>;
1953
+ };
1954
+ recordings: {
1955
+ readonly annotations: {
1956
+ readonly destructiveHint: false;
1957
+ readonly openWorldHint: false;
1958
+ readonly readOnlyHint: true;
1959
+ };
1960
+ readonly description: "Read a runner's finalized recordings from workspace storage, including after the runner terminates. Omit recordingId to list recordings in storage-key order; follow nextPageToken for more. An empty list for a specific recording means it is not published or does not exist. Video URLs expire; platform URLs remain stable.";
1961
+ readonly input: z.ZodObject<{
1962
+ id: z.ZodString;
1963
+ pageToken: z.ZodOptional<z.ZodString>;
1964
+ recordingId: z.ZodOptional<z.ZodUUID>;
1965
+ workspaceId: z.ZodOptional<WorkspaceId>;
1966
+ }, z.core.$strip>;
1967
+ readonly kind: "read";
1968
+ readonly name: "runner.recordings";
1969
+ readonly output: z.ZodObject<{
1970
+ nextPageToken: z.ZodOptional<z.ZodString>;
1971
+ recordings: z.ZodArray<z.ZodObject<{
1972
+ endedAt: z.ZodISODateTime;
1973
+ id: z.ZodUUID;
1974
+ mode: z.ZodEnum<{
1975
+ manual: "manual";
1976
+ automatic: "automatic";
1977
+ }>;
1978
+ runIds: z.ZodArray<z.ZodString>;
1979
+ runnerId: z.ZodString;
1980
+ runnerInstanceId: z.ZodUUID;
1981
+ startedAt: z.ZodISODateTime;
1982
+ status: z.ZodEnum<{
1983
+ failed: "failed";
1984
+ ready: "ready";
1985
+ }>;
1986
+ version: z.ZodLiteral<1>;
1987
+ url: z.ZodURL;
1988
+ videoUrl: z.ZodOptional<z.ZodURL>;
1989
+ }, z.core.$strip>>;
1990
+ }, z.core.$strip>;
1991
+ };
1992
+ evaluateSnippet: {
1993
+ readonly annotations: {
1994
+ readonly destructiveHint: true;
1995
+ readonly openWorldHint: true;
1996
+ readonly readOnlyHint: false;
1997
+ };
1998
+ readonly description: "Evaluate a snippet against whatever the runner's browser is showing right now. Answers whether the snippet ran, and its error if it threw — not the value it evaluated to, so read anything you want back out of the runner's journal (a snippet's `console.log` lands in the `console` stream). A snippet starts no run and leaves no run-scoped journal entries of its own. `runner-cannot-evaluate-snippets` on a runner with nothing attached to serve one — which will never clear, so check that the runner you launched is one that runs a browser or app before retrying. `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. Neither is proof the snippet did not run: a snippet that outlives the answer window is still executing when you read this, so do not blindly resubmit one that mutates what the page is looking at.";
1999
+ readonly input: z.ZodObject<{
2000
+ code: z.ZodString;
2001
+ filePath: z.ZodOptional<z.ZodString>;
2002
+ files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2003
+ id: z.ZodString;
2004
+ workspaceId: z.ZodOptional<WorkspaceId>;
2005
+ }, z.core.$strip>;
2006
+ readonly kind: "write";
2007
+ readonly name: "runner.evaluateSnippet";
2008
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2009
+ errorMessage: z.ZodOptional<z.ZodString>;
2010
+ outcome: z.ZodLiteral<"success">;
2011
+ result: z.ZodEnum<{
2012
+ success: "success";
2013
+ error: "error";
2014
+ stopped: "stopped";
2015
+ }>;
2016
+ }, z.core.$strip>, z.ZodObject<{
2017
+ failureReason: z.ZodEnum<{
2018
+ "runner-cannot-evaluate-snippets": "runner-cannot-evaluate-snippets";
2019
+ "runner-unreachable": "runner-unreachable";
2020
+ }>;
2021
+ outcome: z.ZodLiteral<"failure">;
2022
+ }, z.core.$strip>], "outcome">;
2023
+ };
2024
+ get: {
2025
+ readonly annotations: {
2026
+ readonly destructiveHint: false;
2027
+ readonly openWorldHint: false;
2028
+ readonly readOnlyHint: true;
2029
+ };
2030
+ 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.";
2031
+ readonly input: z.ZodObject<{
2032
+ id: z.ZodString;
2033
+ workspaceId: z.ZodOptional<WorkspaceId>;
2034
+ }, z.core.$strip>;
2035
+ readonly kind: "read";
2036
+ readonly name: "runner.get";
2037
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2038
+ id: z.ZodString;
2039
+ outcome: z.ZodLiteral<"success">;
2040
+ running: z.ZodLiteral<false>;
2041
+ }, z.core.$strip>, z.ZodObject<{
2042
+ id: z.ZodString;
2043
+ outcome: z.ZodLiteral<"success">;
2044
+ running: z.ZodLiteral<true>;
2045
+ url: z.ZodURL;
2046
+ }, z.core.$strip>], "running">;
2047
+ };
2048
+ highlightSelector: {
2049
+ readonly annotations: {
2050
+ readonly destructiveHint: false;
2051
+ readonly openWorldHint: false;
2052
+ readonly readOnlyHint: false;
2053
+ };
2054
+ readonly description: "Highlight the elements a selector matches on an interactive runner's live page, and answer how many it matched. The highlight stays until it is replaced or cleared, so it is visible in the next `runner.takeScreenshot` — which is the point, since a caller cannot see the runner's screen otherwise. Send an empty selector to clear, which answers `cleared`. `status` tells a selector that matched nothing (`empty`) from one the page could not parse (`invalid`), so a caller can tell a bad locator from a locator pointing at nothing. `no-answer` if the page did not answer in time: the highlight runs inside the page, so a page that is gone or mid-navigation does not answer slowly, it does not answer at all. `runner-cannot-highlight-selectors` on a runner with no browser to draw on. `runner-unreachable` if the runner could not be reached: it may still be starting, or it may have terminated after inactivity.";
2055
+ readonly input: z.ZodObject<{
2056
+ id: z.ZodString;
2057
+ selector: z.ZodString;
2058
+ workspaceId: z.ZodOptional<WorkspaceId>;
2059
+ }, z.core.$strip>;
2060
+ readonly kind: "write";
2061
+ readonly name: "runner.highlightSelector";
2062
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2063
+ matchCount: z.ZodNumber;
2064
+ outcome: z.ZodLiteral<"success">;
2065
+ selector: z.ZodString;
2066
+ status: z.ZodLiteral<"valid" | "invalid" | "empty">;
2067
+ targetPage: z.ZodOptional<z.ZodString>;
2068
+ }, z.core.$strip>, z.ZodObject<{
2069
+ outcome: z.ZodLiteral<"cleared">;
2070
+ }, z.core.$strip>, z.ZodObject<{
2071
+ errorMessage: z.ZodOptional<z.ZodString>;
2072
+ failureReason: z.ZodEnum<{
2073
+ "runner-unreachable": "runner-unreachable";
2074
+ "no-answer": "no-answer";
2075
+ "runner-cannot-highlight-selectors": "runner-cannot-highlight-selectors";
2076
+ }>;
2077
+ outcome: z.ZodLiteral<"failure">;
2078
+ }, z.core.$strip>], "outcome">;
2079
+ };
2080
+ importPackage: {
2081
+ readonly annotations: {
2082
+ readonly destructiveHint: true;
2083
+ readonly openWorldHint: true;
2084
+ readonly readOnlyHint: false;
2085
+ };
2086
+ readonly description: "Install a package into an interactive runner's live run and import it, so a snippet or a selection can use it without a full run to reinstall dependencies. An `install-failed` failure carries npm's reason in `errorMessage`. `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. The install may still have landed, but installing the same version again does nothing, so retrying is safe.";
2087
+ readonly input: z.ZodObject<{
2088
+ id: z.ZodString;
2089
+ npmDependencies: z.ZodRecord<z.ZodString, z.ZodString>;
2090
+ packageName: z.ZodString;
2091
+ packageVersion: z.ZodString;
2092
+ workspaceId: z.ZodOptional<WorkspaceId>;
2093
+ }, z.core.$strip>;
2094
+ readonly kind: "write";
2095
+ readonly name: "runner.importPackage";
2096
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2097
+ outcome: z.ZodLiteral<"success">;
2098
+ }, z.core.$strip>, z.ZodObject<{
2099
+ errorMessage: z.ZodOptional<z.ZodString>;
2100
+ failureReason: z.ZodEnum<{
2101
+ "runner-unreachable": "runner-unreachable";
2102
+ "install-failed": "install-failed";
2103
+ }>;
2104
+ outcome: z.ZodLiteral<"failure">;
2105
+ }, z.core.$strip>], "outcome">;
2106
+ };
2107
+ inspect: {
2108
+ readonly annotations: {
2109
+ readonly destructiveHint: false;
2110
+ readonly openWorldHint: false;
2111
+ readonly readOnlyHint: false;
2112
+ };
2113
+ readonly description: string;
2114
+ readonly input: z.ZodObject<{
2115
+ id: z.ZodString;
2116
+ request: z.ZodDiscriminatedUnion<[z.ZodObject<{
2117
+ selector: z.ZodString;
2118
+ what: z.ZodLiteral<"element-html">;
2119
+ }, z.core.$strip>, z.ZodObject<{
2120
+ selector: z.ZodOptional<z.ZodString>;
2121
+ what: z.ZodLiteral<"page-html">;
2122
+ }, z.core.$strip>, z.ZodObject<{
2123
+ variableName: z.ZodString;
2124
+ what: z.ZodLiteral<"variable">;
2125
+ }, z.core.$strip>], "what">;
2126
+ workspaceId: z.ZodOptional<WorkspaceId>;
2127
+ }, z.core.$strip>;
2128
+ readonly kind: "read";
2129
+ readonly name: "runner.inspect";
2130
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2131
+ outcome: z.ZodLiteral<"success">;
2132
+ value: z.ZodString;
2133
+ }, z.core.$strip>, z.ZodObject<{
2134
+ errorMessage: z.ZodOptional<z.ZodString>;
2135
+ failureReason: z.ZodEnum<{
2136
+ "runner-unreachable": "runner-unreachable";
2137
+ "nothing-to-inspect": "nothing-to-inspect";
2138
+ "runner-is-not-a-browser": "runner-is-not-a-browser";
2139
+ }>;
2140
+ outcome: z.ZodLiteral<"failure">;
2141
+ }, z.core.$strip>], "outcome">;
2142
+ };
2143
+ inspectMobile: {
2144
+ readonly annotations: {
2145
+ readonly destructiveHint: false;
2146
+ readonly openWorldHint: false;
2147
+ readonly readOnlyHint: true;
2148
+ };
2149
+ 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, carrying some text, or matching a selector. This does not refresh the runner's inactivity timer. 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 an `android` or `ios` runner instead. `invalid-selector` (elements by selector only) means the selector itself could not be parsed under the given `strategy` — distinct from a selector that parsed fine but matched nothing, which answers `matches: []` 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.";
2150
+ readonly input: z.ZodObject<{
2151
+ id: z.ZodString;
2152
+ request: z.ZodDiscriminatedUnion<[z.ZodObject<{
2153
+ what: z.ZodLiteral<"session">;
2154
+ }, z.core.$strip>, z.ZodObject<{
2155
+ what: z.ZodLiteral<"contexts">;
2156
+ }, z.core.$strip>, z.ZodObject<{
2157
+ context: z.ZodOptional<z.ZodString>;
2158
+ what: z.ZodLiteral<"page">;
2159
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
2160
+ by: z.ZodLiteral<"point">;
2161
+ context: z.ZodOptional<z.ZodString>;
1787
2162
  what: z.ZodLiteral<"elements">;
1788
2163
  x: z.ZodInt;
1789
2164
  y: z.ZodInt;
@@ -2113,6 +2488,124 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2113
2488
  outcome: z.ZodLiteral<"failure">;
2114
2489
  }, z.core.$strip>], "failureReason">], "outcome">;
2115
2490
  };
2491
+ performActions: {
2492
+ readonly annotations: {
2493
+ readonly destructiveHint: true;
2494
+ readonly openWorldHint: true;
2495
+ readonly readOnlyHint: false;
2496
+ };
2497
+ readonly description: "Perform a sequence of raw browser actions on an interactive runner in one request, one after another, and answer with what happened to each. A `success` means every action took effect. A `failure` names the first action that did not (`failedIndex`, `failureReason`), the last one that did (`lastCompletedIndex`), and whether actions were left unperformed (`stoppedEarly`); `results` has one entry per action reached, in order. Read `effect` on an entry before sending its action again: `performed` means the runner did it; `not-performed` means the runner answered that it did not take effect, though a `navigate` that timed out may still be loading; `unknown` means the runner stopped answering with the action in flight (`runner-unreachable`), or its screen went quiet mid-action (`action-unconfirmed`), and it may have taken effect — a click that submitted a form, say — so take a screenshot instead of repeating it. A sequence gets about a minute to start its actions; an action it did not reach in time is `out-of-time`, nothing after it was attempted, and the rest can go in a new request. Everything `runner.performAction` says about a runner that has never run anything, a mobile runner, and the `screen-needs-a-run`, `screen-not-ready`, `runner-has-no-screen` and `action-not-supported-on-mobile` reasons holds for each action here.";
2498
+ readonly input: z.ZodObject<{
2499
+ actions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
2500
+ button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
2501
+ type: z.ZodLiteral<"click">;
2502
+ x: z.ZodInt;
2503
+ y: z.ZodInt;
2504
+ }, z.core.$strict>, z.ZodObject<{
2505
+ type: z.ZodLiteral<"double_click">;
2506
+ x: z.ZodInt;
2507
+ y: z.ZodInt;
2508
+ }, z.core.$strict>, z.ZodObject<{
2509
+ scroll_x: z.ZodInt;
2510
+ scroll_y: z.ZodInt;
2511
+ type: z.ZodLiteral<"scroll">;
2512
+ x: z.ZodInt;
2513
+ y: z.ZodInt;
2514
+ }, z.core.$strict>, z.ZodObject<{
2515
+ type: z.ZodLiteral<"move">;
2516
+ x: z.ZodInt;
2517
+ y: z.ZodInt;
2518
+ }, z.core.$strict>, z.ZodObject<{
2519
+ path: z.ZodArray<z.ZodObject<{
2520
+ x: z.ZodInt;
2521
+ y: z.ZodInt;
2522
+ }, z.core.$strict>>;
2523
+ type: z.ZodLiteral<"drag">;
2524
+ }, z.core.$strict>, z.ZodObject<{
2525
+ keys: z.ZodArray<z.ZodString>;
2526
+ type: z.ZodLiteral<"keypress">;
2527
+ }, z.core.$strict>, z.ZodObject<{
2528
+ type: z.ZodLiteral<"navigate">;
2529
+ url: z.ZodURL;
2530
+ }, z.core.$strict>, z.ZodObject<{
2531
+ text: z.ZodString;
2532
+ type: z.ZodLiteral<"type">;
2533
+ }, z.core.$strict>], "type">>;
2534
+ id: z.ZodString;
2535
+ screenshotMode: z.ZodOptional<z.ZodEnum<{
2536
+ none: "none";
2537
+ final: "final";
2538
+ each: "each";
2539
+ }>>;
2540
+ stopOnFailure: z.ZodOptional<z.ZodBoolean>;
2541
+ workspaceId: z.ZodOptional<WorkspaceId>;
2542
+ }, z.core.$strip>;
2543
+ readonly kind: "write";
2544
+ readonly name: "runner.performActions";
2545
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2546
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
2547
+ lastCompletedIndex: z.ZodInt;
2548
+ outcome: z.ZodLiteral<"success">;
2549
+ results: z.ZodArray<z.ZodObject<{
2550
+ effect: z.ZodLiteral<"performed">;
2551
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
2552
+ index: z.ZodInt;
2553
+ outcome: z.ZodLiteral<"success">;
2554
+ }, z.core.$strip>>;
2555
+ }, z.core.$strip>, z.ZodObject<{
2556
+ errorMessage: z.ZodOptional<z.ZodString>;
2557
+ failedIndex: z.ZodInt;
2558
+ failureReason: z.ZodEnum<{
2559
+ "runner-unreachable": "runner-unreachable";
2560
+ "screen-needs-a-run": "screen-needs-a-run";
2561
+ "screen-not-ready": "screen-not-ready";
2562
+ "action-failed": "action-failed";
2563
+ "runner-has-no-screen": "runner-has-no-screen";
2564
+ "action-not-supported-on-mobile": "action-not-supported-on-mobile";
2565
+ "out-of-time": "out-of-time";
2566
+ "action-unconfirmed": "action-unconfirmed";
2567
+ }>;
2568
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
2569
+ lastCompletedIndex: z.ZodOptional<z.ZodInt>;
2570
+ outcome: z.ZodLiteral<"failure">;
2571
+ results: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
2572
+ effect: z.ZodLiteral<"performed">;
2573
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
2574
+ index: z.ZodInt;
2575
+ outcome: z.ZodLiteral<"success">;
2576
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
2577
+ effect: z.ZodLiteral<"not-performed">;
2578
+ errorMessage: z.ZodString;
2579
+ failureReason: z.ZodLiteral<"action-failed">;
2580
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
2581
+ index: z.ZodInt;
2582
+ outcome: z.ZodLiteral<"failure">;
2583
+ }, z.core.$strip>, z.ZodObject<{
2584
+ effect: z.ZodLiteral<"unknown">;
2585
+ failureReason: z.ZodLiteral<"runner-unreachable">;
2586
+ index: z.ZodInt;
2587
+ outcome: z.ZodLiteral<"failure">;
2588
+ }, z.core.$strip>, z.ZodObject<{
2589
+ effect: z.ZodLiteral<"unknown">;
2590
+ errorMessage: z.ZodString;
2591
+ failureReason: z.ZodLiteral<"action-unconfirmed">;
2592
+ index: z.ZodInt;
2593
+ outcome: z.ZodLiteral<"failure">;
2594
+ }, z.core.$strip>, z.ZodObject<{
2595
+ effect: z.ZodLiteral<"not-performed">;
2596
+ failureReason: z.ZodEnum<{
2597
+ "screen-needs-a-run": "screen-needs-a-run";
2598
+ "screen-not-ready": "screen-not-ready";
2599
+ "runner-has-no-screen": "runner-has-no-screen";
2600
+ "action-not-supported-on-mobile": "action-not-supported-on-mobile";
2601
+ "out-of-time": "out-of-time";
2602
+ }>;
2603
+ index: z.ZodInt;
2604
+ outcome: z.ZodLiteral<"failure">;
2605
+ }, z.core.$strip>], "failureReason">], "outcome">>;
2606
+ stoppedEarly: z.ZodBoolean;
2607
+ }, z.core.$strip>], "outcome">;
2608
+ };
2116
2609
  promoteSnapshot: {
2117
2610
  readonly annotations: {
2118
2611
  readonly destructiveHint: true;
@@ -2177,123 +2670,45 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2177
2670
  outcome: z.ZodLiteral<"failure">;
2178
2671
  }, z.core.$strip>], "outcome">;
2179
2672
  };
2180
- runFlow: {
2181
- readonly annotations: {
2182
- readonly destructiveHint: true;
2183
- readonly openWorldHint: true;
2184
- readonly readOnlyHint: false;
2185
- };
2186
- readonly description: "Run a flow on an interactive runner. When `selection` is given the lines run against the browser as it stands, so nothing is re-navigated and nothing is signed in again; without it the whole entry point runs from a fresh browser. A runner with no live browser starts one before a selection and says so with `bootstrappedRunner`, which means those lines ran against a fresh page rather than the one an earlier run left. A selection produces no `runStarted` event, so follow it by its run id on `run-status` like any other run. Send `unchangedFiles` to ship only what changed since an earlier run on this runner; a `needs-full-sync` failure names the paths it does not hold, and the way to recover is the same run again with every file in `files`. Answers as soon as the run is accepted, with the id to follow it by — nothing waits for the run to finish. Which browser or device the run needs is read from the flow file's own execution target, so it is not supplied here; when it does not match what the runner is, the call fails with `runner-target-mismatch` rather than failing partway through the run. `runner-unreachable` means the answer did not arrive, which is NOT the same as the run not having started: the runner may have accepted it and been too slow to say so, and resubmitting would start a second run that is billed and journalled alongside the first. Read the runner's `run-status` journal stream before resubmitting, and use the newest run id there if one appeared.";
2187
- readonly input: z.ZodObject<{
2188
- entryPointPath: z.ZodString;
2189
- env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2190
- environmentId: z.ZodOptional<PublicIdSchema>;
2191
- files: z.ZodRecord<z.ZodString, z.ZodString>;
2192
- id: z.ZodString;
2193
- selection: z.ZodOptional<z.ZodObject<{
2194
- endLine: z.ZodInt;
2195
- path: z.ZodString;
2196
- startLine: z.ZodInt;
2197
- }, z.core.$strip>>;
2198
- unchangedFiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2199
- workspaceId: z.ZodOptional<WorkspaceId>;
2200
- }, z.core.$strip>;
2201
- readonly kind: "write";
2202
- readonly name: "runner.runFlow";
2203
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2204
- bootstrappedRunner: z.ZodOptional<z.ZodBoolean>;
2205
- outcome: z.ZodLiteral<"success">;
2206
- runId: z.ZodString;
2207
- }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
2208
- failureReason: z.ZodLiteral<"runner-target-mismatch">;
2209
- outcome: z.ZodLiteral<"failure">;
2210
- requiredRunnerName: z.ZodEnum<{
2211
- basic: "basic";
2212
- playwright: "playwright";
2213
- android: "android";
2214
- ios: "ios";
2215
- }>;
2216
- runnerName: z.ZodEnum<{
2217
- basic: "basic";
2218
- playwright: "playwright";
2219
- android: "android";
2220
- ios: "ios";
2221
- }>;
2222
- }, z.core.$strip>, z.ZodObject<{
2223
- failureReason: z.ZodLiteral<"needs-full-sync">;
2224
- missingPaths: z.ZodArray<z.ZodString>;
2225
- outcome: z.ZodLiteral<"failure">;
2226
- }, z.core.$strip>, z.ZodObject<{
2227
- failureReason: z.ZodLiteral<"runner-unreachable">;
2228
- outcome: z.ZodLiteral<"failure">;
2229
- }, z.core.$strip>], "failureReason">], "outcome">;
2230
- };
2231
- stopRun: {
2232
- readonly annotations: {
2233
- readonly destructiveHint: true;
2234
- readonly openWorldHint: false;
2235
- readonly readOnlyHint: false;
2236
- };
2237
- readonly description: "Stop what a runner is currently executing, leaving the runner up and its browser on whatever page the run reached. Succeeds whether or not anything was running, and `wasRunning` says which. This is the counterpart of `runner.terminate`, which ends the runner itself. The run stops where it is, so the journal's `run-status` settles it as stopped rather than passed or failed. `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. The stop may still have landed, but stopping a runner that is already idle does nothing, so retrying is safe.";
2238
- readonly input: z.ZodObject<{
2239
- id: z.ZodString;
2240
- workspaceId: z.ZodOptional<WorkspaceId>;
2241
- }, z.core.$strip>;
2242
- readonly kind: "write";
2243
- readonly name: "runner.stopRun";
2244
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2245
- outcome: z.ZodLiteral<"success">;
2246
- wasRunning: z.ZodBoolean;
2247
- }, z.core.$strip>, z.ZodObject<{
2248
- failureReason: z.ZodEnum<{
2249
- "runner-unreachable": "runner-unreachable";
2250
- }>;
2251
- outcome: z.ZodLiteral<"failure">;
2252
- }, z.core.$strip>], "outcome">;
2253
- };
2254
- takeScreenshot: {
2673
+ };
2674
+ skill: {
2675
+ get: {
2255
2676
  readonly annotations: {
2256
2677
  readonly destructiveHint: false;
2257
2678
  readonly openWorldHint: false;
2258
- readonly readOnlyHint: false;
2679
+ readonly readOnlyHint: true;
2259
2680
  };
2260
- 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; this refreshes the inactivity timer and can extend the runner's billed lifetime. 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.";
2681
+ readonly description: "Read a QA Wolf skill: the instructions a coding agent follows for one kind of QA Wolf work. The reply carries the skill's SKILL.md and every file under its references directory, so nothing else has to be fetched for it. Read the skill before starting the work it covers and follow it. A link in the reply of the form ../<skill>/SKILL.md names another skill, which this call reads by that name.";
2261
2682
  readonly input: z.ZodObject<{
2262
- id: z.ZodString;
2263
- workspaceId: z.ZodOptional<WorkspaceId>;
2683
+ name: z.ZodString;
2264
2684
  }, z.core.$strip>;
2265
2685
  readonly kind: "read";
2266
- readonly name: "runner.takeScreenshot";
2267
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
2268
- imageJpegBase64: z.ZodString;
2269
- outcome: z.ZodLiteral<"success">;
2270
- }, z.core.$strip>, z.ZodObject<{
2271
- failureReason: z.ZodEnum<{
2272
- "runner-unreachable": "runner-unreachable";
2273
- "screen-needs-a-run": "screen-needs-a-run";
2274
- "screen-not-ready": "screen-not-ready";
2275
- "runner-has-no-screen": "runner-has-no-screen";
2276
- }>;
2277
- outcome: z.ZodLiteral<"failure">;
2278
- }, z.core.$strip>], "outcome">;
2686
+ readonly name: "skill.get";
2687
+ readonly output: z.ZodObject<{
2688
+ description: z.ZodString;
2689
+ name: z.ZodString;
2690
+ instructions: z.ZodString;
2691
+ references: z.ZodArray<z.ZodObject<{
2692
+ path: z.ZodString;
2693
+ text: z.ZodString;
2694
+ }, z.core.$strip>>;
2695
+ }, z.core.$strip>;
2279
2696
  };
2280
- terminate: {
2697
+ list: {
2281
2698
  readonly annotations: {
2282
- readonly destructiveHint: true;
2699
+ readonly destructiveHint: false;
2283
2700
  readonly openWorldHint: false;
2284
- readonly readOnlyHint: false;
2701
+ readonly readOnlyHint: true;
2285
2702
  };
2286
- readonly description: "End an interactive runner on the caller's team, and the pod it runs on with it. Terminating a runner that is not running succeeds and reports `wasRunning: false`. This ends the runner: use `runner.stopRun` to stop what a runner is currently executing while leaving the runner up.";
2287
- readonly input: z.ZodObject<{
2288
- id: z.ZodString;
2289
- workspaceId: z.ZodOptional<WorkspaceId>;
2290
- }, z.core.$strip>;
2291
- readonly kind: "write";
2292
- readonly name: "runner.terminate";
2703
+ readonly description: "List the QA Wolf skills, each with its name and the description that says when to use it. A skill is the instructions a coding agent follows for one kind of QA Wolf work, such as onboarding an application, creating a flow, repairing a failing flow, or setting up triggers. Call this before any QA Wolf work, pick the skill whose description matches the request, and read it with skill.get.";
2704
+ readonly input: z.ZodObject<{}, z.core.$strip>;
2705
+ readonly kind: "read";
2706
+ readonly name: "skill.list";
2293
2707
  readonly output: z.ZodObject<{
2294
- id: z.ZodString;
2295
- outcome: z.ZodLiteral<"success">;
2296
- wasRunning: z.ZodBoolean;
2708
+ skills: z.ZodArray<z.ZodObject<{
2709
+ description: z.ZodString;
2710
+ name: z.ZodString;
2711
+ }, z.core.$strip>>;
2297
2712
  }, z.core.$strip>;
2298
2713
  };
2299
2714
  };
@@ -2367,7 +2782,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2367
2782
  cadence: z.ZodEnum<{
2368
2783
  hourly: "hourly";
2369
2784
  daily: "daily";
2785
+ weekly: "weekly";
2370
2786
  }>;
2787
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
2788
+ monday: "monday";
2789
+ tuesday: "tuesday";
2790
+ wednesday: "wednesday";
2791
+ thursday: "thursday";
2792
+ friday: "friday";
2793
+ saturday: "saturday";
2794
+ sunday: "sunday";
2795
+ }>>;
2371
2796
  environmentId: PublicIdSchema;
2372
2797
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2373
2798
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2412,7 +2837,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2412
2837
  cadence: z.ZodEnum<{
2413
2838
  hourly: "hourly";
2414
2839
  daily: "daily";
2840
+ weekly: "weekly";
2415
2841
  }>;
2842
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
2843
+ monday: "monday";
2844
+ tuesday: "tuesday";
2845
+ wednesday: "wednesday";
2846
+ thursday: "thursday";
2847
+ friday: "friday";
2848
+ saturday: "saturday";
2849
+ sunday: "sunday";
2850
+ }>>;
2416
2851
  environmentId: EnvironmentId;
2417
2852
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2418
2853
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2495,7 +2930,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2495
2930
  cadence: z.ZodEnum<{
2496
2931
  hourly: "hourly";
2497
2932
  daily: "daily";
2933
+ weekly: "weekly";
2498
2934
  }>;
2935
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
2936
+ monday: "monday";
2937
+ tuesday: "tuesday";
2938
+ wednesday: "wednesday";
2939
+ thursday: "thursday";
2940
+ friday: "friday";
2941
+ saturday: "saturday";
2942
+ sunday: "sunday";
2943
+ }>>;
2499
2944
  environmentId: EnvironmentId;
2500
2945
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2501
2946
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2561,7 +3006,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2561
3006
  cadence: z.ZodEnum<{
2562
3007
  hourly: "hourly";
2563
3008
  daily: "daily";
3009
+ weekly: "weekly";
2564
3010
  }>;
3011
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
3012
+ monday: "monday";
3013
+ tuesday: "tuesday";
3014
+ wednesday: "wednesday";
3015
+ thursday: "thursday";
3016
+ friday: "friday";
3017
+ saturday: "saturday";
3018
+ sunday: "sunday";
3019
+ }>>;
2565
3020
  environmentId: EnvironmentId;
2566
3021
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2567
3022
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2627,7 +3082,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2627
3082
  cadence: z.ZodEnum<{
2628
3083
  hourly: "hourly";
2629
3084
  daily: "daily";
3085
+ weekly: "weekly";
2630
3086
  }>;
3087
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
3088
+ monday: "monday";
3089
+ tuesday: "tuesday";
3090
+ wednesday: "wednesday";
3091
+ thursday: "thursday";
3092
+ friday: "friday";
3093
+ saturday: "saturday";
3094
+ sunday: "sunday";
3095
+ }>>;
2631
3096
  environmentId: EnvironmentId;
2632
3097
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2633
3098
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2693,7 +3158,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2693
3158
  cadence: z.ZodEnum<{
2694
3159
  hourly: "hourly";
2695
3160
  daily: "daily";
3161
+ weekly: "weekly";
2696
3162
  }>;
3163
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
3164
+ monday: "monday";
3165
+ tuesday: "tuesday";
3166
+ wednesday: "wednesday";
3167
+ thursday: "thursday";
3168
+ friday: "friday";
3169
+ saturday: "saturday";
3170
+ sunday: "sunday";
3171
+ }>>;
2697
3172
  environmentId: EnvironmentId;
2698
3173
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2699
3174
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2752,7 +3227,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2752
3227
  cadence: z.ZodEnum<{
2753
3228
  hourly: "hourly";
2754
3229
  daily: "daily";
3230
+ weekly: "weekly";
2755
3231
  }>;
3232
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
3233
+ monday: "monday";
3234
+ tuesday: "tuesday";
3235
+ wednesday: "wednesday";
3236
+ thursday: "thursday";
3237
+ friday: "friday";
3238
+ saturday: "saturday";
3239
+ sunday: "sunday";
3240
+ }>>;
2756
3241
  environmentId: PublicIdSchema;
2757
3242
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2758
3243
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2797,7 +3282,17 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
2797
3282
  cadence: z.ZodEnum<{
2798
3283
  hourly: "hourly";
2799
3284
  daily: "daily";
3285
+ weekly: "weekly";
2800
3286
  }>;
3287
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
3288
+ monday: "monday";
3289
+ tuesday: "tuesday";
3290
+ wednesday: "wednesday";
3291
+ thursday: "thursday";
3292
+ friday: "friday";
3293
+ saturday: "saturday";
3294
+ sunday: "sunday";
3295
+ }>>;
2801
3296
  environmentId: EnvironmentId;
2802
3297
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
2803
3298
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -2887,6 +3382,8 @@ export declare const publicContractsV1: {
2887
3382
  environmentId: z.ZodOptional<PublicIdSchema>;
2888
3383
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
2889
3384
  message: z.ZodString;
3385
+ parentSessionId: z.ZodOptional<PublicIdSchema>;
3386
+ runnerId: z.ZodOptional<z.ZodString>;
2890
3387
  sessionId: z.ZodOptional<PublicIdSchema>;
2891
3388
  workspaceId: z.ZodOptional<PublicIdSchema>;
2892
3389
  }, z.core.$strip>;
@@ -2905,27 +3402,6 @@ export declare const publicContractsV1: {
2905
3402
  }, z.core.$strip>;
2906
3403
  };
2907
3404
  };
2908
- automate: {
2909
- readonly annotations: {
2910
- readonly destructiveHint: true;
2911
- readonly openWorldHint: true;
2912
- readonly readOnlyHint: false;
2913
- };
2914
- readonly description: "Request automation for draft flows. First create a named local .flow.ts draft for every requested journey that does not already have a matching draft; never reuse a generic starter or placeholder. Each new draft must start with a JSDoc Goal: description, import flow from @qawolf/flows/web, and use export default flow(...); a comment-only file or direct test(...) call is not a valid draft. Commit and push all changes with Git to publish them, then list remote drafts to resolve every selected ID. Do not use patch to create or rename a selected flow. Finally make one automation request containing all requested flow IDs.";
2915
- readonly input: z.ZodObject<{
2916
- aiTaskId: z.ZodOptional<PublicIdSchema>;
2917
- environmentId: PublicIdSchema;
2918
- flowIds: z.ZodArray<PublicIdSchema>;
2919
- patch: z.ZodOptional<z.ZodString>;
2920
- workspaceId: z.ZodOptional<PublicIdSchema>;
2921
- }, z.core.$strip>;
2922
- readonly kind: "write";
2923
- readonly name: "automate";
2924
- readonly output: z.ZodObject<{
2925
- automationId: PublicIdSchema;
2926
- url: z.ZodURL;
2927
- }, z.core.$strip>;
2928
- };
2929
3405
  codeHostIntegration: {
2930
3406
  find: {
2931
3407
  readonly annotations: {
@@ -3120,7 +3596,7 @@ export declare const publicContractsV1: {
3120
3596
  readonly openWorldHint: true;
3121
3597
  readonly readOnlyHint: false;
3122
3598
  };
3123
- 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.";
3599
+ 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.";
3124
3600
  readonly input: z.ZodObject<{
3125
3601
  deployTarget: z.ZodOptional<z.ZodURL>;
3126
3602
  environment: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
@@ -4153,6 +4629,124 @@ export declare const publicContractsV1: {
4153
4629
  }, z.core.$strip>;
4154
4630
  };
4155
4631
  };
4632
+ legacyTrigger: {
4633
+ find: {
4634
+ readonly annotations: {
4635
+ readonly destructiveHint: false;
4636
+ readonly openWorldHint: false;
4637
+ readonly readOnlyHint: true;
4638
+ };
4639
+ readonly description: string;
4640
+ readonly input: z.ZodObject<{
4641
+ kind: z.ZodDefault<z.ZodEnum<{
4642
+ static: "static";
4643
+ active: "active";
4644
+ all: "all";
4645
+ }>>;
4646
+ workspaceId: z.ZodOptional<PublicIdSchema>;
4647
+ }, z.core.$strip>;
4648
+ readonly kind: "read";
4649
+ readonly name: "legacyTrigger.find";
4650
+ readonly output: z.ZodObject<{
4651
+ legacyTriggers: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
4652
+ nextAt: z.ZodOptional<z.ZodISODateTime>;
4653
+ repeatMinutes: z.ZodNumber;
4654
+ startAt: z.ZodOptional<z.ZodISODateTime>;
4655
+ timezoneId: z.ZodOptional<z.ZodString>;
4656
+ type: z.ZodLiteral<"scheduled">;
4657
+ environment: z.ZodObject<{
4658
+ id: PublicIdSchema;
4659
+ kind: z.ZodEnum<{
4660
+ static: "static";
4661
+ preview: "preview";
4662
+ }>;
4663
+ name: z.ZodString;
4664
+ terminatedAt: z.ZodOptional<z.ZodISODateTime>;
4665
+ }, z.core.$strip>;
4666
+ id: PublicIdSchema;
4667
+ isPaused: z.ZodBoolean;
4668
+ name: z.ZodString;
4669
+ pausedAt: z.ZodOptional<z.ZodISODateTime>;
4670
+ tags: z.ZodArray<z.ZodObject<{
4671
+ id: z.ZodString;
4672
+ name: z.ZodString;
4673
+ }, z.core.$strip>>;
4674
+ }, z.core.$strip>, z.ZodObject<{
4675
+ adaptiveFlowSelection: z.ZodBoolean;
4676
+ branchScope: z.ZodUnion<readonly [z.ZodObject<{
4677
+ kind: z.ZodLiteral<"all-branches">;
4678
+ }, z.core.$strip>, z.ZodObject<{
4679
+ caseSensitiveGlobs: z.ZodArray<z.ZodString>;
4680
+ kind: z.ZodLiteral<"listed-branches">;
4681
+ negated: z.ZodBoolean;
4682
+ raw: z.ZodString;
4683
+ }, z.core.$strip>]>;
4684
+ codeHostingServiceRepository: z.ZodUnion<readonly [z.ZodObject<{
4685
+ kind: z.ZodLiteral<"any">;
4686
+ }, z.core.$strip>, z.ZodObject<{
4687
+ kind: z.ZodLiteral<"none">;
4688
+ }, z.core.$strip>, z.ZodObject<{
4689
+ id: z.ZodString;
4690
+ kind: z.ZodLiteral<"by-id">;
4691
+ }, z.core.$strip>]>;
4692
+ deploymentPrLabel: z.ZodOptional<z.ZodString>;
4693
+ deploymentType: z.ZodOptional<z.ZodString>;
4694
+ type: z.ZodUnion<readonly [z.ZodLiteral<"generic">, z.ZodLiteral<"pr-testing-button">]>;
4695
+ environment: z.ZodObject<{
4696
+ id: PublicIdSchema;
4697
+ kind: z.ZodEnum<{
4698
+ static: "static";
4699
+ preview: "preview";
4700
+ }>;
4701
+ name: z.ZodString;
4702
+ terminatedAt: z.ZodOptional<z.ZodISODateTime>;
4703
+ }, z.core.$strip>;
4704
+ id: PublicIdSchema;
4705
+ isPaused: z.ZodBoolean;
4706
+ name: z.ZodString;
4707
+ pausedAt: z.ZodOptional<z.ZodISODateTime>;
4708
+ tags: z.ZodArray<z.ZodObject<{
4709
+ id: z.ZodString;
4710
+ name: z.ZodString;
4711
+ }, z.core.$strip>>;
4712
+ }, z.core.$strip>]>>;
4713
+ }, z.core.$strip>;
4714
+ };
4715
+ pause: {
4716
+ readonly annotations: {
4717
+ readonly destructiveHint: true;
4718
+ readonly openWorldHint: false;
4719
+ readonly readOnlyHint: false;
4720
+ };
4721
+ readonly description: string;
4722
+ readonly input: z.ZodObject<{
4723
+ legacyTriggerId: PublicIdSchema;
4724
+ }, z.core.$strip>;
4725
+ readonly kind: "write";
4726
+ readonly name: "legacyTrigger.pause";
4727
+ readonly output: z.ZodObject<{
4728
+ isPaused: z.ZodBoolean;
4729
+ legacyTriggerId: PublicIdSchema;
4730
+ }, z.core.$strip>;
4731
+ };
4732
+ resume: {
4733
+ readonly annotations: {
4734
+ readonly destructiveHint: true;
4735
+ readonly openWorldHint: true;
4736
+ readonly readOnlyHint: false;
4737
+ };
4738
+ readonly description: string;
4739
+ readonly input: z.ZodObject<{
4740
+ legacyTriggerId: PublicIdSchema;
4741
+ }, z.core.$strip>;
4742
+ readonly kind: "write";
4743
+ readonly name: "legacyTrigger.resume";
4744
+ readonly output: z.ZodObject<{
4745
+ isPaused: z.ZodBoolean;
4746
+ legacyTriggerId: PublicIdSchema;
4747
+ }, z.core.$strip>;
4748
+ };
4749
+ };
4156
4750
  run: {
4157
4751
  create: {
4158
4752
  readonly annotations: {
@@ -4399,46 +4993,322 @@ export declare const publicContractsV1: {
4399
4993
  reattempt: {
4400
4994
  readonly annotations: {
4401
4995
  readonly destructiveHint: true;
4402
- readonly openWorldHint: true;
4996
+ readonly openWorldHint: true;
4997
+ readonly readOnlyHint: false;
4998
+ };
4999
+ readonly description: string;
5000
+ readonly input: z.ZodObject<{
5001
+ flowIds: z.ZodOptional<z.ZodArray<PublicIdSchema>>;
5002
+ runId: PublicIdSchema;
5003
+ }, z.core.$strip>;
5004
+ readonly kind: "write";
5005
+ readonly name: "run.reattempt";
5006
+ readonly output: z.ZodObject<{
5007
+ reattemptedFlowIds: z.ZodArray<PublicIdSchema>;
5008
+ runId: PublicIdSchema;
5009
+ url: z.ZodURL;
5010
+ }, z.core.$strip>;
5011
+ };
5012
+ stop: {
5013
+ readonly annotations: {
5014
+ readonly destructiveHint: true;
5015
+ readonly openWorldHint: true;
5016
+ readonly readOnlyHint: false;
5017
+ };
5018
+ readonly description: "Stop a run, including its queued flows and automatic retries. Stopping is asynchronous and can update run-status messages and commit statuses in connected integrations. Repeated requests are safe, and finished runs keep their results. A run that is still being created returns not found; retry once run.get returns the run. If run.get returns a different runId, use that ID. Poll run.get for results.";
5019
+ readonly input: z.ZodObject<{
5020
+ runId: PublicIdSchema;
5021
+ }, z.core.$strip>;
5022
+ readonly kind: "write";
5023
+ readonly name: "run.stop";
5024
+ readonly output: z.ZodObject<{
5025
+ runId: PublicIdSchema;
5026
+ status: z.ZodEnum<{
5027
+ accepted: "accepted";
5028
+ "already-finished": "already-finished";
5029
+ "execution-not-found": "execution-not-found";
5030
+ }>;
5031
+ url: z.ZodURL;
5032
+ }, z.core.$strip>;
5033
+ };
5034
+ triage: {
5035
+ readonly annotations: {
5036
+ readonly destructiveHint: false;
5037
+ readonly openWorldHint: false;
5038
+ readonly readOnlyHint: true;
5039
+ };
5040
+ readonly description: string;
5041
+ readonly input: z.ZodObject<{
5042
+ flowId: PublicIdSchema;
5043
+ runId: PublicIdSchema;
5044
+ }, z.core.$strip>;
5045
+ readonly kind: "read";
5046
+ readonly name: "run.triage";
5047
+ readonly output: z.ZodObject<{
5048
+ answers: z.ZodObject<{
5049
+ verdict: z.ZodObject<{
5050
+ choice: z.ZodEnum<{
5051
+ bug: "bug";
5052
+ maintenance: "maintenance";
5053
+ }>;
5054
+ confidence: z.ZodNumber;
5055
+ probabilities: z.ZodRecord<z.ZodString, z.ZodNumber>;
5056
+ type: z.ZodLiteral<"choice">;
5057
+ }, z.core.$strip>;
5058
+ }, z.core.$strip>;
5059
+ decision: z.ZodDiscriminatedUnion<[z.ZodObject<{
5060
+ diagnosis: z.ZodEnum<{
5061
+ bug: "bug";
5062
+ maintenance: "maintenance";
5063
+ }>;
5064
+ type: z.ZodLiteral<"diagnose">;
5065
+ }, z.core.$strip>, z.ZodObject<{
5066
+ diagnosis: z.ZodEnum<{
5067
+ bug: "bug";
5068
+ maintenance: "maintenance";
5069
+ }>;
5070
+ type: z.ZodLiteral<"suggest">;
5071
+ }, z.core.$strip>, z.ZodObject<{
5072
+ type: z.ZodLiteral<"needsHuman">;
5073
+ }, z.core.$strip>], "type">;
5074
+ model: z.ZodString;
5075
+ state: z.ZodJSONSchema;
5076
+ }, z.core.$strip>;
5077
+ };
5078
+ };
5079
+ runner: {
5080
+ runFlow: {
5081
+ readonly annotations: {
5082
+ readonly destructiveHint: true;
5083
+ readonly openWorldHint: true;
5084
+ readonly readOnlyHint: false;
5085
+ };
5086
+ readonly description: "Run a flow on an interactive runner. When `selection` is given the lines run against the browser as it stands, so nothing is re-navigated and nothing is signed in again; without it the whole entry point runs from a fresh browser. A runner with no live browser starts one before a selection and says so with `bootstrappedRunner`, which means those lines ran against a fresh page rather than the one an earlier run left. A selection produces no `runStarted` event, so follow it by its run id on `run-status` like any other run. Send `unchangedFiles` to ship only what changed since an earlier run on this runner; a `needs-full-sync` failure names the paths it does not hold, and the way to recover is the same run again with every file in `files`. Answers as soon as the run is accepted, with the id to follow it by — nothing waits for the run to finish. Which browser or device the run needs is read from the flow file's own execution target, so it is not supplied here; when it does not match what the runner is, the call fails with `runner-target-mismatch` rather than failing partway through the run. `runner-unreachable` means the answer did not arrive, which is NOT the same as the run not having started: the runner may have accepted it and been too slow to say so, and resubmitting would start a second run that is billed and journalled alongside the first. Read the runner's `run-status` journal stream before resubmitting, and use the newest run id there if one appeared.";
5087
+ readonly input: z.ZodObject<{
5088
+ entryPointPath: z.ZodString;
5089
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5090
+ environmentId: z.ZodOptional<PublicIdSchema>;
5091
+ files: z.ZodRecord<z.ZodString, z.ZodString>;
5092
+ id: z.ZodString;
5093
+ selection: z.ZodOptional<z.ZodObject<{
5094
+ endLine: z.ZodInt;
5095
+ path: z.ZodString;
5096
+ startLine: z.ZodInt;
5097
+ }, z.core.$strip>>;
5098
+ unchangedFiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5099
+ workspaceId: z.ZodOptional<PublicIdSchema>;
5100
+ }, z.core.$strip>;
5101
+ readonly kind: "write";
5102
+ readonly name: "runner.runFlow";
5103
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5104
+ bootstrappedRunner: z.ZodOptional<z.ZodBoolean>;
5105
+ outcome: z.ZodLiteral<"success">;
5106
+ runId: z.ZodString;
5107
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
5108
+ failureReason: z.ZodLiteral<"runner-target-mismatch">;
5109
+ outcome: z.ZodLiteral<"failure">;
5110
+ requiredRunnerName: z.ZodEnum<{
5111
+ basic: "basic";
5112
+ playwright: "playwright";
5113
+ android: "android";
5114
+ ios: "ios";
5115
+ }>;
5116
+ runnerName: z.ZodEnum<{
5117
+ basic: "basic";
5118
+ playwright: "playwright";
5119
+ android: "android";
5120
+ ios: "ios";
5121
+ }>;
5122
+ }, z.core.$strip>, z.ZodObject<{
5123
+ failureReason: z.ZodLiteral<"needs-full-sync">;
5124
+ missingPaths: z.ZodArray<z.ZodString>;
5125
+ outcome: z.ZodLiteral<"failure">;
5126
+ }, z.core.$strip>, z.ZodObject<{
5127
+ failureReason: z.ZodLiteral<"runner-unreachable">;
5128
+ outcome: z.ZodLiteral<"failure">;
5129
+ }, z.core.$strip>], "failureReason">], "outcome">;
5130
+ };
5131
+ stopRun: {
5132
+ readonly annotations: {
5133
+ readonly destructiveHint: true;
5134
+ readonly openWorldHint: false;
5135
+ readonly readOnlyHint: false;
5136
+ };
5137
+ readonly description: "Stop what a runner is currently executing, leaving the runner up and its browser on whatever page the run reached. Succeeds whether or not anything was running, and `wasRunning` says which. This is the counterpart of `runner.terminate`, which ends the runner itself. The run stops where it is, so the journal's `run-status` settles it as stopped rather than passed or failed. `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. The stop may still have landed, but stopping a runner that is already idle does nothing, so retrying is safe.";
5138
+ readonly input: z.ZodObject<{
5139
+ id: z.ZodString;
5140
+ workspaceId: z.ZodOptional<PublicIdSchema>;
5141
+ }, z.core.$strip>;
5142
+ readonly kind: "write";
5143
+ readonly name: "runner.stopRun";
5144
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5145
+ outcome: z.ZodLiteral<"success">;
5146
+ wasRunning: z.ZodBoolean;
5147
+ }, z.core.$strip>, z.ZodObject<{
5148
+ failureReason: z.ZodEnum<{
5149
+ "runner-unreachable": "runner-unreachable";
5150
+ }>;
5151
+ outcome: z.ZodLiteral<"failure">;
5152
+ }, z.core.$strip>], "outcome">;
5153
+ };
5154
+ takeScreenshot: {
5155
+ readonly annotations: {
5156
+ readonly destructiveHint: false;
5157
+ readonly openWorldHint: false;
5158
+ readonly readOnlyHint: false;
5159
+ };
5160
+ 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; this refreshes the inactivity timer and can extend the runner's billed lifetime. 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.";
5161
+ readonly input: z.ZodObject<{
5162
+ id: z.ZodString;
5163
+ workspaceId: z.ZodOptional<PublicIdSchema>;
5164
+ }, z.core.$strip>;
5165
+ readonly kind: "read";
5166
+ readonly name: "runner.takeScreenshot";
5167
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5168
+ imageJpegBase64: z.ZodString;
5169
+ outcome: z.ZodLiteral<"success">;
5170
+ }, z.core.$strip>, z.ZodObject<{
5171
+ failureReason: z.ZodEnum<{
5172
+ "runner-unreachable": "runner-unreachable";
5173
+ "screen-needs-a-run": "screen-needs-a-run";
5174
+ "screen-not-ready": "screen-not-ready";
5175
+ "runner-has-no-screen": "runner-has-no-screen";
5176
+ }>;
5177
+ outcome: z.ZodLiteral<"failure">;
5178
+ }, z.core.$strip>], "outcome">;
5179
+ };
5180
+ terminate: {
5181
+ readonly annotations: {
5182
+ readonly destructiveHint: true;
5183
+ readonly openWorldHint: false;
4403
5184
  readonly readOnlyHint: false;
4404
5185
  };
4405
- readonly description: string;
5186
+ readonly description: "End an interactive runner on the caller's team, and the pod it runs on with it. Terminating a runner that is not running succeeds and reports `wasRunning: false`. This ends the runner: use `runner.stopRun` to stop what a runner is currently executing while leaving the runner up.";
4406
5187
  readonly input: z.ZodObject<{
4407
- flowIds: z.ZodOptional<z.ZodArray<PublicIdSchema>>;
4408
- runId: PublicIdSchema;
5188
+ id: z.ZodString;
5189
+ workspaceId: z.ZodOptional<PublicIdSchema>;
4409
5190
  }, z.core.$strip>;
4410
5191
  readonly kind: "write";
4411
- readonly name: "run.reattempt";
5192
+ readonly name: "runner.terminate";
4412
5193
  readonly output: z.ZodObject<{
4413
- reattemptedFlowIds: z.ZodArray<PublicIdSchema>;
4414
- runId: PublicIdSchema;
4415
- url: z.ZodURL;
5194
+ id: z.ZodString;
5195
+ outcome: z.ZodLiteral<"success">;
5196
+ wasRunning: z.ZodBoolean;
4416
5197
  }, z.core.$strip>;
4417
5198
  };
4418
- stop: {
5199
+ record: {
4419
5200
  readonly annotations: {
4420
- readonly destructiveHint: true;
4421
- readonly openWorldHint: true;
5201
+ readonly destructiveHint: false;
5202
+ readonly openWorldHint: false;
4422
5203
  readonly readOnlyHint: false;
4423
5204
  };
4424
- readonly description: "Stop a run, including its queued flows and automatic retries. Stopping is asynchronous and can update run-status messages and commit statuses in connected integrations. Repeated requests are safe, and finished runs keep their results. A run that is still being created returns not found; retry once run.get returns the run. If run.get returns a different runId, use that ID. Poll run.get for results.";
5205
+ readonly description: "Control video recording on a Playwright runner. Start requires a caller-generated UUID; stop targets that UUID so retries cannot stop a later recording. Manual capture spans runs and suppresses automatic capture. Auto settings affect subsequent full runs. The URL opens recording history after the runner terminates. Videos may be unavailable after abrupt pod loss.";
4425
5206
  readonly input: z.ZodObject<{
4426
- runId: PublicIdSchema;
5207
+ command: z.ZodDiscriminatedUnion<[z.ZodObject<{
5208
+ action: z.ZodLiteral<"start">;
5209
+ recordingId: z.ZodUUID;
5210
+ }, z.core.$strict>, z.ZodObject<{
5211
+ action: z.ZodLiteral<"stop">;
5212
+ recordingId: z.ZodUUID;
5213
+ }, z.core.$strict>, z.ZodObject<{
5214
+ action: z.ZodLiteral<"auto">;
5215
+ enabled: z.ZodBoolean;
5216
+ }, z.core.$strict>, z.ZodObject<{
5217
+ action: z.ZodLiteral<"status">;
5218
+ }, z.core.$strict>], "action">;
5219
+ id: z.ZodString;
5220
+ workspaceId: z.ZodOptional<PublicIdSchema>;
4427
5221
  }, z.core.$strip>;
4428
5222
  readonly kind: "write";
4429
- readonly name: "run.stop";
5223
+ readonly name: "runner.record";
4430
5224
  readonly output: z.ZodObject<{
4431
- runId: PublicIdSchema;
4432
- status: z.ZodEnum<{
4433
- accepted: "accepted";
4434
- "already-finished": "already-finished";
4435
- "execution-not-found": "execution-not-found";
4436
- }>;
5225
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
5226
+ outcome: z.ZodLiteral<"success">;
5227
+ recording: z.ZodOptional<z.ZodObject<{
5228
+ endedAt: z.ZodISODateTime;
5229
+ id: z.ZodUUID;
5230
+ mode: z.ZodEnum<{
5231
+ manual: "manual";
5232
+ automatic: "automatic";
5233
+ }>;
5234
+ runIds: z.ZodArray<z.ZodString>;
5235
+ runnerId: z.ZodString;
5236
+ runnerInstanceId: z.ZodUUID;
5237
+ startedAt: z.ZodISODateTime;
5238
+ status: z.ZodEnum<{
5239
+ failed: "failed";
5240
+ ready: "ready";
5241
+ }>;
5242
+ version: z.ZodLiteral<1>;
5243
+ }, z.core.$strip>>;
5244
+ state: z.ZodObject<{
5245
+ active: z.ZodOptional<z.ZodObject<{
5246
+ id: z.ZodUUID;
5247
+ mode: z.ZodEnum<{
5248
+ manual: "manual";
5249
+ automatic: "automatic";
5250
+ }>;
5251
+ startedAt: z.ZodISODateTime;
5252
+ }, z.core.$strip>>;
5253
+ auto: z.ZodEnum<{
5254
+ default: "default";
5255
+ on: "on";
5256
+ off: "off";
5257
+ }>;
5258
+ }, z.core.$strip>;
5259
+ }, z.core.$strip>, z.ZodObject<{
5260
+ failureReason: z.ZodEnum<{
5261
+ "runner-unreachable": "runner-unreachable";
5262
+ "screen-not-ready": "screen-not-ready";
5263
+ unsupported: "unsupported";
5264
+ "recording-in-progress": "recording-in-progress";
5265
+ "recording-not-found": "recording-not-found";
5266
+ "recording-id-used": "recording-id-used";
5267
+ "recording-failed": "recording-failed";
5268
+ }>;
5269
+ outcome: z.ZodLiteral<"failure">;
5270
+ }, z.core.$strip>], "outcome">;
4437
5271
  url: z.ZodURL;
4438
5272
  }, z.core.$strip>;
4439
5273
  };
4440
- };
4441
- runner: {
5274
+ recordings: {
5275
+ readonly annotations: {
5276
+ readonly destructiveHint: false;
5277
+ readonly openWorldHint: false;
5278
+ readonly readOnlyHint: true;
5279
+ };
5280
+ readonly description: "Read a runner's finalized recordings from workspace storage, including after the runner terminates. Omit recordingId to list recordings in storage-key order; follow nextPageToken for more. An empty list for a specific recording means it is not published or does not exist. Video URLs expire; platform URLs remain stable.";
5281
+ readonly input: z.ZodObject<{
5282
+ id: z.ZodString;
5283
+ pageToken: z.ZodOptional<z.ZodString>;
5284
+ recordingId: z.ZodOptional<z.ZodUUID>;
5285
+ workspaceId: z.ZodOptional<PublicIdSchema>;
5286
+ }, z.core.$strip>;
5287
+ readonly kind: "read";
5288
+ readonly name: "runner.recordings";
5289
+ readonly output: z.ZodObject<{
5290
+ nextPageToken: z.ZodOptional<z.ZodString>;
5291
+ recordings: z.ZodArray<z.ZodObject<{
5292
+ endedAt: z.ZodISODateTime;
5293
+ id: z.ZodUUID;
5294
+ mode: z.ZodEnum<{
5295
+ manual: "manual";
5296
+ automatic: "automatic";
5297
+ }>;
5298
+ runIds: z.ZodArray<z.ZodString>;
5299
+ runnerId: z.ZodString;
5300
+ runnerInstanceId: z.ZodUUID;
5301
+ startedAt: z.ZodISODateTime;
5302
+ status: z.ZodEnum<{
5303
+ failed: "failed";
5304
+ ready: "ready";
5305
+ }>;
5306
+ version: z.ZodLiteral<1>;
5307
+ url: z.ZodURL;
5308
+ videoUrl: z.ZodOptional<z.ZodURL>;
5309
+ }, z.core.$strip>>;
5310
+ }, z.core.$strip>;
5311
+ };
4442
5312
  evaluateSnippet: {
4443
5313
  readonly annotations: {
4444
5314
  readonly destructiveHint: true;
@@ -4938,6 +5808,124 @@ export declare const publicContractsV1: {
4938
5808
  outcome: z.ZodLiteral<"failure">;
4939
5809
  }, z.core.$strip>], "failureReason">], "outcome">;
4940
5810
  };
5811
+ performActions: {
5812
+ readonly annotations: {
5813
+ readonly destructiveHint: true;
5814
+ readonly openWorldHint: true;
5815
+ readonly readOnlyHint: false;
5816
+ };
5817
+ readonly description: "Perform a sequence of raw browser actions on an interactive runner in one request, one after another, and answer with what happened to each. A `success` means every action took effect. A `failure` names the first action that did not (`failedIndex`, `failureReason`), the last one that did (`lastCompletedIndex`), and whether actions were left unperformed (`stoppedEarly`); `results` has one entry per action reached, in order. Read `effect` on an entry before sending its action again: `performed` means the runner did it; `not-performed` means the runner answered that it did not take effect, though a `navigate` that timed out may still be loading; `unknown` means the runner stopped answering with the action in flight (`runner-unreachable`), or its screen went quiet mid-action (`action-unconfirmed`), and it may have taken effect — a click that submitted a form, say — so take a screenshot instead of repeating it. A sequence gets about a minute to start its actions; an action it did not reach in time is `out-of-time`, nothing after it was attempted, and the rest can go in a new request. Everything `runner.performAction` says about a runner that has never run anything, a mobile runner, and the `screen-needs-a-run`, `screen-not-ready`, `runner-has-no-screen` and `action-not-supported-on-mobile` reasons holds for each action here.";
5818
+ readonly input: z.ZodObject<{
5819
+ actions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
5820
+ button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
5821
+ type: z.ZodLiteral<"click">;
5822
+ x: z.ZodInt;
5823
+ y: z.ZodInt;
5824
+ }, z.core.$strict>, z.ZodObject<{
5825
+ type: z.ZodLiteral<"double_click">;
5826
+ x: z.ZodInt;
5827
+ y: z.ZodInt;
5828
+ }, z.core.$strict>, z.ZodObject<{
5829
+ scroll_x: z.ZodInt;
5830
+ scroll_y: z.ZodInt;
5831
+ type: z.ZodLiteral<"scroll">;
5832
+ x: z.ZodInt;
5833
+ y: z.ZodInt;
5834
+ }, z.core.$strict>, z.ZodObject<{
5835
+ type: z.ZodLiteral<"move">;
5836
+ x: z.ZodInt;
5837
+ y: z.ZodInt;
5838
+ }, z.core.$strict>, z.ZodObject<{
5839
+ path: z.ZodArray<z.ZodObject<{
5840
+ x: z.ZodInt;
5841
+ y: z.ZodInt;
5842
+ }, z.core.$strict>>;
5843
+ type: z.ZodLiteral<"drag">;
5844
+ }, z.core.$strict>, z.ZodObject<{
5845
+ keys: z.ZodArray<z.ZodString>;
5846
+ type: z.ZodLiteral<"keypress">;
5847
+ }, z.core.$strict>, z.ZodObject<{
5848
+ type: z.ZodLiteral<"navigate">;
5849
+ url: z.ZodURL;
5850
+ }, z.core.$strict>, z.ZodObject<{
5851
+ text: z.ZodString;
5852
+ type: z.ZodLiteral<"type">;
5853
+ }, z.core.$strict>], "type">>;
5854
+ id: z.ZodString;
5855
+ screenshotMode: z.ZodOptional<z.ZodEnum<{
5856
+ none: "none";
5857
+ final: "final";
5858
+ each: "each";
5859
+ }>>;
5860
+ stopOnFailure: z.ZodOptional<z.ZodBoolean>;
5861
+ workspaceId: z.ZodOptional<PublicIdSchema>;
5862
+ }, z.core.$strip>;
5863
+ readonly kind: "write";
5864
+ readonly name: "runner.performActions";
5865
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5866
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
5867
+ lastCompletedIndex: z.ZodInt;
5868
+ outcome: z.ZodLiteral<"success">;
5869
+ results: z.ZodArray<z.ZodObject<{
5870
+ effect: z.ZodLiteral<"performed">;
5871
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
5872
+ index: z.ZodInt;
5873
+ outcome: z.ZodLiteral<"success">;
5874
+ }, z.core.$strip>>;
5875
+ }, z.core.$strip>, z.ZodObject<{
5876
+ errorMessage: z.ZodOptional<z.ZodString>;
5877
+ failedIndex: z.ZodInt;
5878
+ failureReason: z.ZodEnum<{
5879
+ "runner-unreachable": "runner-unreachable";
5880
+ "screen-needs-a-run": "screen-needs-a-run";
5881
+ "screen-not-ready": "screen-not-ready";
5882
+ "action-failed": "action-failed";
5883
+ "runner-has-no-screen": "runner-has-no-screen";
5884
+ "action-not-supported-on-mobile": "action-not-supported-on-mobile";
5885
+ "out-of-time": "out-of-time";
5886
+ "action-unconfirmed": "action-unconfirmed";
5887
+ }>;
5888
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
5889
+ lastCompletedIndex: z.ZodOptional<z.ZodInt>;
5890
+ outcome: z.ZodLiteral<"failure">;
5891
+ results: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
5892
+ effect: z.ZodLiteral<"performed">;
5893
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
5894
+ index: z.ZodInt;
5895
+ outcome: z.ZodLiteral<"success">;
5896
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
5897
+ effect: z.ZodLiteral<"not-performed">;
5898
+ errorMessage: z.ZodString;
5899
+ failureReason: z.ZodLiteral<"action-failed">;
5900
+ imageJpegBase64: z.ZodOptional<z.ZodString>;
5901
+ index: z.ZodInt;
5902
+ outcome: z.ZodLiteral<"failure">;
5903
+ }, z.core.$strip>, z.ZodObject<{
5904
+ effect: z.ZodLiteral<"unknown">;
5905
+ failureReason: z.ZodLiteral<"runner-unreachable">;
5906
+ index: z.ZodInt;
5907
+ outcome: z.ZodLiteral<"failure">;
5908
+ }, z.core.$strip>, z.ZodObject<{
5909
+ effect: z.ZodLiteral<"unknown">;
5910
+ errorMessage: z.ZodString;
5911
+ failureReason: z.ZodLiteral<"action-unconfirmed">;
5912
+ index: z.ZodInt;
5913
+ outcome: z.ZodLiteral<"failure">;
5914
+ }, z.core.$strip>, z.ZodObject<{
5915
+ effect: z.ZodLiteral<"not-performed">;
5916
+ failureReason: z.ZodEnum<{
5917
+ "screen-needs-a-run": "screen-needs-a-run";
5918
+ "screen-not-ready": "screen-not-ready";
5919
+ "runner-has-no-screen": "runner-has-no-screen";
5920
+ "action-not-supported-on-mobile": "action-not-supported-on-mobile";
5921
+ "out-of-time": "out-of-time";
5922
+ }>;
5923
+ index: z.ZodInt;
5924
+ outcome: z.ZodLiteral<"failure">;
5925
+ }, z.core.$strip>], "failureReason">], "outcome">>;
5926
+ stoppedEarly: z.ZodBoolean;
5927
+ }, z.core.$strip>], "outcome">;
5928
+ };
4941
5929
  promoteSnapshot: {
4942
5930
  readonly annotations: {
4943
5931
  readonly destructiveHint: true;
@@ -5002,123 +5990,45 @@ export declare const publicContractsV1: {
5002
5990
  outcome: z.ZodLiteral<"failure">;
5003
5991
  }, z.core.$strip>], "outcome">;
5004
5992
  };
5005
- runFlow: {
5993
+ };
5994
+ skill: {
5995
+ get: {
5006
5996
  readonly annotations: {
5007
- readonly destructiveHint: true;
5008
- readonly openWorldHint: true;
5009
- readonly readOnlyHint: false;
5997
+ readonly destructiveHint: false;
5998
+ readonly openWorldHint: false;
5999
+ readonly readOnlyHint: true;
5010
6000
  };
5011
- readonly description: "Run a flow on an interactive runner. When `selection` is given the lines run against the browser as it stands, so nothing is re-navigated and nothing is signed in again; without it the whole entry point runs from a fresh browser. A runner with no live browser starts one before a selection and says so with `bootstrappedRunner`, which means those lines ran against a fresh page rather than the one an earlier run left. A selection produces no `runStarted` event, so follow it by its run id on `run-status` like any other run. Send `unchangedFiles` to ship only what changed since an earlier run on this runner; a `needs-full-sync` failure names the paths it does not hold, and the way to recover is the same run again with every file in `files`. Answers as soon as the run is accepted, with the id to follow it by — nothing waits for the run to finish. Which browser or device the run needs is read from the flow file's own execution target, so it is not supplied here; when it does not match what the runner is, the call fails with `runner-target-mismatch` rather than failing partway through the run. `runner-unreachable` means the answer did not arrive, which is NOT the same as the run not having started: the runner may have accepted it and been too slow to say so, and resubmitting would start a second run that is billed and journalled alongside the first. Read the runner's `run-status` journal stream before resubmitting, and use the newest run id there if one appeared.";
6001
+ readonly description: "Read a QA Wolf skill: the instructions a coding agent follows for one kind of QA Wolf work. The reply carries the skill's SKILL.md and every file under its references directory, so nothing else has to be fetched for it. Read the skill before starting the work it covers and follow it. A link in the reply of the form ../<skill>/SKILL.md names another skill, which this call reads by that name.";
5012
6002
  readonly input: z.ZodObject<{
5013
- entryPointPath: z.ZodString;
5014
- env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5015
- environmentId: z.ZodOptional<PublicIdSchema>;
5016
- files: z.ZodRecord<z.ZodString, z.ZodString>;
5017
- id: z.ZodString;
5018
- selection: z.ZodOptional<z.ZodObject<{
5019
- endLine: z.ZodInt;
6003
+ name: z.ZodString;
6004
+ }, z.core.$strip>;
6005
+ readonly kind: "read";
6006
+ readonly name: "skill.get";
6007
+ readonly output: z.ZodObject<{
6008
+ description: z.ZodString;
6009
+ name: z.ZodString;
6010
+ instructions: z.ZodString;
6011
+ references: z.ZodArray<z.ZodObject<{
5020
6012
  path: z.ZodString;
5021
- startLine: z.ZodInt;
6013
+ text: z.ZodString;
5022
6014
  }, z.core.$strip>>;
5023
- unchangedFiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5024
- workspaceId: z.ZodOptional<PublicIdSchema>;
5025
- }, z.core.$strip>;
5026
- readonly kind: "write";
5027
- readonly name: "runner.runFlow";
5028
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5029
- bootstrappedRunner: z.ZodOptional<z.ZodBoolean>;
5030
- outcome: z.ZodLiteral<"success">;
5031
- runId: z.ZodString;
5032
- }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
5033
- failureReason: z.ZodLiteral<"runner-target-mismatch">;
5034
- outcome: z.ZodLiteral<"failure">;
5035
- requiredRunnerName: z.ZodEnum<{
5036
- basic: "basic";
5037
- playwright: "playwright";
5038
- android: "android";
5039
- ios: "ios";
5040
- }>;
5041
- runnerName: z.ZodEnum<{
5042
- basic: "basic";
5043
- playwright: "playwright";
5044
- android: "android";
5045
- ios: "ios";
5046
- }>;
5047
- }, z.core.$strip>, z.ZodObject<{
5048
- failureReason: z.ZodLiteral<"needs-full-sync">;
5049
- missingPaths: z.ZodArray<z.ZodString>;
5050
- outcome: z.ZodLiteral<"failure">;
5051
- }, z.core.$strip>, z.ZodObject<{
5052
- failureReason: z.ZodLiteral<"runner-unreachable">;
5053
- outcome: z.ZodLiteral<"failure">;
5054
- }, z.core.$strip>], "failureReason">], "outcome">;
5055
- };
5056
- stopRun: {
5057
- readonly annotations: {
5058
- readonly destructiveHint: true;
5059
- readonly openWorldHint: false;
5060
- readonly readOnlyHint: false;
5061
- };
5062
- readonly description: "Stop what a runner is currently executing, leaving the runner up and its browser on whatever page the run reached. Succeeds whether or not anything was running, and `wasRunning` says which. This is the counterpart of `runner.terminate`, which ends the runner itself. The run stops where it is, so the journal's `run-status` settles it as stopped rather than passed or failed. `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. The stop may still have landed, but stopping a runner that is already idle does nothing, so retrying is safe.";
5063
- readonly input: z.ZodObject<{
5064
- id: z.ZodString;
5065
- workspaceId: z.ZodOptional<PublicIdSchema>;
5066
6015
  }, z.core.$strip>;
5067
- readonly kind: "write";
5068
- readonly name: "runner.stopRun";
5069
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5070
- outcome: z.ZodLiteral<"success">;
5071
- wasRunning: z.ZodBoolean;
5072
- }, z.core.$strip>, z.ZodObject<{
5073
- failureReason: z.ZodEnum<{
5074
- "runner-unreachable": "runner-unreachable";
5075
- }>;
5076
- outcome: z.ZodLiteral<"failure">;
5077
- }, z.core.$strip>], "outcome">;
5078
6016
  };
5079
- takeScreenshot: {
6017
+ list: {
5080
6018
  readonly annotations: {
5081
6019
  readonly destructiveHint: false;
5082
6020
  readonly openWorldHint: false;
5083
- readonly readOnlyHint: false;
6021
+ readonly readOnlyHint: true;
5084
6022
  };
5085
- 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; this refreshes the inactivity timer and can extend the runner's billed lifetime. 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.";
5086
- readonly input: z.ZodObject<{
5087
- id: z.ZodString;
5088
- workspaceId: z.ZodOptional<PublicIdSchema>;
5089
- }, z.core.$strip>;
6023
+ readonly description: "List the QA Wolf skills, each with its name and the description that says when to use it. A skill is the instructions a coding agent follows for one kind of QA Wolf work, such as onboarding an application, creating a flow, repairing a failing flow, or setting up triggers. Call this before any QA Wolf work, pick the skill whose description matches the request, and read it with skill.get.";
6024
+ readonly input: z.ZodObject<{}, z.core.$strip>;
5090
6025
  readonly kind: "read";
5091
- readonly name: "runner.takeScreenshot";
5092
- readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
5093
- imageJpegBase64: z.ZodString;
5094
- outcome: z.ZodLiteral<"success">;
5095
- }, z.core.$strip>, z.ZodObject<{
5096
- failureReason: z.ZodEnum<{
5097
- "runner-unreachable": "runner-unreachable";
5098
- "screen-needs-a-run": "screen-needs-a-run";
5099
- "screen-not-ready": "screen-not-ready";
5100
- "runner-has-no-screen": "runner-has-no-screen";
5101
- }>;
5102
- outcome: z.ZodLiteral<"failure">;
5103
- }, z.core.$strip>], "outcome">;
5104
- };
5105
- terminate: {
5106
- readonly annotations: {
5107
- readonly destructiveHint: true;
5108
- readonly openWorldHint: false;
5109
- readonly readOnlyHint: false;
5110
- };
5111
- readonly description: "End an interactive runner on the caller's team, and the pod it runs on with it. Terminating a runner that is not running succeeds and reports `wasRunning: false`. This ends the runner: use `runner.stopRun` to stop what a runner is currently executing while leaving the runner up.";
5112
- readonly input: z.ZodObject<{
5113
- id: z.ZodString;
5114
- workspaceId: z.ZodOptional<PublicIdSchema>;
5115
- }, z.core.$strip>;
5116
- readonly kind: "write";
5117
- readonly name: "runner.terminate";
6026
+ readonly name: "skill.list";
5118
6027
  readonly output: z.ZodObject<{
5119
- id: z.ZodString;
5120
- outcome: z.ZodLiteral<"success">;
5121
- wasRunning: z.ZodBoolean;
6028
+ skills: z.ZodArray<z.ZodObject<{
6029
+ description: z.ZodString;
6030
+ name: z.ZodString;
6031
+ }, z.core.$strip>>;
5122
6032
  }, z.core.$strip>;
5123
6033
  };
5124
6034
  };
@@ -5192,7 +6102,17 @@ export declare const publicContractsV1: {
5192
6102
  cadence: z.ZodEnum<{
5193
6103
  hourly: "hourly";
5194
6104
  daily: "daily";
6105
+ weekly: "weekly";
5195
6106
  }>;
6107
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6108
+ monday: "monday";
6109
+ tuesday: "tuesday";
6110
+ wednesday: "wednesday";
6111
+ thursday: "thursday";
6112
+ friday: "friday";
6113
+ saturday: "saturday";
6114
+ sunday: "sunday";
6115
+ }>>;
5196
6116
  environmentId: PublicIdSchema;
5197
6117
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5198
6118
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5237,7 +6157,17 @@ export declare const publicContractsV1: {
5237
6157
  cadence: z.ZodEnum<{
5238
6158
  hourly: "hourly";
5239
6159
  daily: "daily";
6160
+ weekly: "weekly";
5240
6161
  }>;
6162
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6163
+ monday: "monday";
6164
+ tuesday: "tuesday";
6165
+ wednesday: "wednesday";
6166
+ thursday: "thursday";
6167
+ friday: "friday";
6168
+ saturday: "saturday";
6169
+ sunday: "sunday";
6170
+ }>>;
5241
6171
  environmentId: PublicIdSchema;
5242
6172
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5243
6173
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5320,7 +6250,17 @@ export declare const publicContractsV1: {
5320
6250
  cadence: z.ZodEnum<{
5321
6251
  hourly: "hourly";
5322
6252
  daily: "daily";
6253
+ weekly: "weekly";
5323
6254
  }>;
6255
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6256
+ monday: "monday";
6257
+ tuesday: "tuesday";
6258
+ wednesday: "wednesday";
6259
+ thursday: "thursday";
6260
+ friday: "friday";
6261
+ saturday: "saturday";
6262
+ sunday: "sunday";
6263
+ }>>;
5324
6264
  environmentId: PublicIdSchema;
5325
6265
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5326
6266
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5386,7 +6326,17 @@ export declare const publicContractsV1: {
5386
6326
  cadence: z.ZodEnum<{
5387
6327
  hourly: "hourly";
5388
6328
  daily: "daily";
6329
+ weekly: "weekly";
5389
6330
  }>;
6331
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6332
+ monday: "monday";
6333
+ tuesday: "tuesday";
6334
+ wednesday: "wednesday";
6335
+ thursday: "thursday";
6336
+ friday: "friday";
6337
+ saturday: "saturday";
6338
+ sunday: "sunday";
6339
+ }>>;
5390
6340
  environmentId: PublicIdSchema;
5391
6341
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5392
6342
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5452,7 +6402,17 @@ export declare const publicContractsV1: {
5452
6402
  cadence: z.ZodEnum<{
5453
6403
  hourly: "hourly";
5454
6404
  daily: "daily";
6405
+ weekly: "weekly";
5455
6406
  }>;
6407
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6408
+ monday: "monday";
6409
+ tuesday: "tuesday";
6410
+ wednesday: "wednesday";
6411
+ thursday: "thursday";
6412
+ friday: "friday";
6413
+ saturday: "saturday";
6414
+ sunday: "sunday";
6415
+ }>>;
5456
6416
  environmentId: PublicIdSchema;
5457
6417
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5458
6418
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5518,7 +6478,17 @@ export declare const publicContractsV1: {
5518
6478
  cadence: z.ZodEnum<{
5519
6479
  hourly: "hourly";
5520
6480
  daily: "daily";
6481
+ weekly: "weekly";
5521
6482
  }>;
6483
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6484
+ monday: "monday";
6485
+ tuesday: "tuesday";
6486
+ wednesday: "wednesday";
6487
+ thursday: "thursday";
6488
+ friday: "friday";
6489
+ saturday: "saturday";
6490
+ sunday: "sunday";
6491
+ }>>;
5522
6492
  environmentId: PublicIdSchema;
5523
6493
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5524
6494
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5577,7 +6547,17 @@ export declare const publicContractsV1: {
5577
6547
  cadence: z.ZodEnum<{
5578
6548
  hourly: "hourly";
5579
6549
  daily: "daily";
6550
+ weekly: "weekly";
5580
6551
  }>;
6552
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6553
+ monday: "monday";
6554
+ tuesday: "tuesday";
6555
+ wednesday: "wednesday";
6556
+ thursday: "thursday";
6557
+ friday: "friday";
6558
+ saturday: "saturday";
6559
+ sunday: "sunday";
6560
+ }>>;
5581
6561
  environmentId: PublicIdSchema;
5582
6562
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5583
6563
  timeOfDay: z.ZodOptional<z.ZodString>;
@@ -5622,7 +6602,17 @@ export declare const publicContractsV1: {
5622
6602
  cadence: z.ZodEnum<{
5623
6603
  hourly: "hourly";
5624
6604
  daily: "daily";
6605
+ weekly: "weekly";
5625
6606
  }>;
6607
+ dayOfWeek: z.ZodOptional<z.ZodEnum<{
6608
+ monday: "monday";
6609
+ tuesday: "tuesday";
6610
+ wednesday: "wednesday";
6611
+ thursday: "thursday";
6612
+ friday: "friday";
6613
+ saturday: "saturday";
6614
+ sunday: "sunday";
6615
+ }>>;
5626
6616
  environmentId: PublicIdSchema;
5627
6617
  minuteOfHour: z.ZodOptional<z.ZodNumber>;
5628
6618
  timeOfDay: z.ZodOptional<z.ZodString>;