@qawolf/api-contracts 0.54.0 → 0.59.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 (76) hide show
  1. package/dist/v1/agent/get.d.ts +8 -1
  2. package/dist/v1/agent/get.d.ts.map +1 -1
  3. package/dist/v1/agent/get.js +16 -1
  4. package/dist/v1/agent/get.js.map +1 -1
  5. package/dist/v1/agent/send.d.ts +1 -1
  6. package/dist/v1/agent/send.js +1 -1
  7. package/dist/v1/agent/send.js.map +1 -1
  8. package/dist/v1/agent/wait.d.ts +9 -0
  9. package/dist/v1/agent/wait.d.ts.map +1 -0
  10. package/dist/v1/agent/wait.js +6 -0
  11. package/dist/v1/agent/wait.js.map +1 -0
  12. package/dist/v1/codeHostIntegration/find.d.ts +30 -0
  13. package/dist/v1/codeHostIntegration/find.d.ts.map +1 -0
  14. package/dist/v1/codeHostIntegration/find.js +32 -0
  15. package/dist/v1/codeHostIntegration/find.js.map +1 -0
  16. package/dist/v1/codeHostIntegration/index.d.ts +4 -0
  17. package/dist/v1/codeHostIntegration/index.d.ts.map +1 -0
  18. package/dist/v1/codeHostIntegration/index.js +4 -0
  19. package/dist/v1/codeHostIntegration/index.js.map +1 -0
  20. package/dist/v1/codeHostIntegration/listRepositories.d.ts +35 -0
  21. package/dist/v1/codeHostIntegration/listRepositories.d.ts.map +1 -0
  22. package/dist/v1/codeHostIntegration/listRepositories.js +34 -0
  23. package/dist/v1/codeHostIntegration/listRepositories.js.map +1 -0
  24. package/dist/v1/codeHostIntegration/resource.d.ts +19 -0
  25. package/dist/v1/codeHostIntegration/resource.d.ts.map +1 -0
  26. package/dist/v1/codeHostIntegration/resource.js +27 -0
  27. package/dist/v1/codeHostIntegration/resource.js.map +1 -0
  28. package/dist/v1/deployment/find.d.ts +48 -0
  29. package/dist/v1/deployment/find.d.ts.map +1 -0
  30. package/dist/v1/deployment/find.js +30 -0
  31. package/dist/v1/deployment/find.js.map +1 -0
  32. package/dist/v1/deployment/index.d.ts +189 -0
  33. package/dist/v1/deployment/index.d.ts.map +1 -0
  34. package/dist/v1/deployment/index.js +9 -0
  35. package/dist/v1/deployment/index.js.map +1 -0
  36. package/dist/v1/deployment/listTriggerEvaluations.d.ts +96 -0
  37. package/dist/v1/deployment/listTriggerEvaluations.d.ts.map +1 -0
  38. package/dist/v1/deployment/listTriggerEvaluations.js +101 -0
  39. package/dist/v1/deployment/listTriggerEvaluations.js.map +1 -0
  40. package/dist/v1/deployment/resource.d.ts +29 -0
  41. package/dist/v1/deployment/resource.d.ts.map +1 -0
  42. package/dist/v1/deployment/resource.js +44 -0
  43. package/dist/v1/deployment/resource.js.map +1 -0
  44. package/dist/v1/environment/create.d.ts +1 -0
  45. package/dist/v1/environment/create.d.ts.map +1 -1
  46. package/dist/v1/environment/find.d.ts +1 -0
  47. package/dist/v1/environment/find.d.ts.map +1 -1
  48. package/dist/v1/environment/index.d.ts +1 -0
  49. package/dist/v1/environment/index.d.ts.map +1 -1
  50. package/dist/v1/environment/resource.d.ts +1 -0
  51. package/dist/v1/environment/resource.d.ts.map +1 -1
  52. package/dist/v1/environment/resource.js +4 -0
  53. package/dist/v1/environment/resource.js.map +1 -1
  54. package/dist/v1/environment/update.d.ts +1 -0
  55. package/dist/v1/environment/update.d.ts.map +1 -1
  56. package/dist/v1/ids.d.ts +2 -6
  57. package/dist/v1/ids.d.ts.map +1 -1
  58. package/dist/v1/ids.js.map +1 -1
  59. package/dist/v1/index.d.ts +406 -10
  60. package/dist/v1/index.d.ts.map +1 -1
  61. package/dist/v1/index.js +7 -3
  62. package/dist/v1/index.js.map +1 -1
  63. package/dist/v1/runner/identity.js +1 -1
  64. package/dist/v1/runner/identity.js.map +1 -1
  65. package/dist/v1/runner/index.d.ts +1 -1
  66. package/dist/v1/runner/index.js +1 -1
  67. package/dist/v1/runner/index.js.map +1 -1
  68. package/dist/v1/runner/performAction.d.ts +1 -1
  69. package/dist/v1/runner/performAction.d.ts.map +1 -1
  70. package/dist/v1/runner/performAction.js +4 -7
  71. package/dist/v1/runner/performAction.js.map +1 -1
  72. package/dist/v1/sharedSchemas.d.ts +1 -0
  73. package/dist/v1/sharedSchemas.d.ts.map +1 -1
  74. package/dist/v1/sharedSchemas.js +1 -0
  75. package/dist/v1/sharedSchemas.js.map +1 -1
  76. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/v1/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,CAC3B,aAAa,SAAS,cAAc,EACpC,MAAM,SAAS,cAAc,EAC7B,KAAK,SAAS,cAAc,EAC5B,YAAY,SAAS,cAAc,GAAG,cAAc,EACpD,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,WAAW,SAAS,cAAc,GAAG,cAAc,EACnD,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,aAAa,SAAS,cAAc,GAAG,cAAc,EACrD,SAAS,SAAS,cAAc,GAAG,cAAc,IAC/C;IACF,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,aAAa,CAAC;IAC3B;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,aAAa,CAAC;IAC3B;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAC7C,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,CACf,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAiB9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,GAAI,SAAS,SAAS,cAAc,EACzE,WAAW,SAAS,6BAMjB,CAAC"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/v1/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,CAC3B,aAAa,SAAS,cAAc,EACpC,MAAM,SAAS,cAAc,EAC7B,KAAK,SAAS,cAAc,EAC5B,YAAY,SAAS,cAAc,GAAG,cAAc,EACpD,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,WAAW,SAAS,cAAc,GAAG,cAAc,EACnD,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,aAAa,SAAS,cAAc,GAAG,cAAc,EACrD,SAAS,SAAS,cAAc,GAAG,cAAc,EACjD,YAAY,SAAS,cAAc,GAAG,cAAc,IAClD;IACF,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,aAAa,CAAC;IAC3B,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,aAAa,CAAC;IAC3B;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAC7C,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,CACf,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAiB9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,GAAI,SAAS,SAAS,cAAc,EACzE,WAAW,SAAS,6BAMjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/v1/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4DxB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACrE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,iHAAiH,CAClH;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAoB,EACpB,EAAE,CACF,SAAS;KACN,QAAQ,EAAE;KACV,QAAQ,CACP,oJAAoJ,CACrJ,CAAC"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/v1/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyDxB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACrE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,iHAAiH,CAClH;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAoB,EACpB,EAAE,CACF,SAAS;KACN,QAAQ,EAAE;KACV,QAAQ,CACP,oJAAoJ,CACrJ,CAAC"}
@@ -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>(ids: PublicIdSchemasOf<EnvironmentId, FlowId, RunId, AutomationId, IssueId, WorkspaceId, AiTaskId, ChatSessionId, TriggerId>) => {
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>) => {
15
15
  agent: {
16
16
  get: {
17
17
  readonly annotations: {
@@ -19,10 +19,11 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
19
19
  readonly openWorldHint: false;
20
20
  readonly readOnlyHint: true;
21
21
  };
22
- readonly description: "Monitor a QA Wolf AI session by reading its status and replies. After agent.send, share the returned session URL before monitoring. Wait 30 to 60 seconds between checks; do not call this in a tight loop. Pass the nextCursor from one response as the cursor on the next check; it then reads only what is new, and only for the session that minted it. Continue monitoring silently when the status is unchanged and no replies come back; do not narrate waiting, announce the next check, or ask whether to keep monitoring. Report only substantive new progress, questions, blockers, or the final outcome. A status of \"waiting-for-you\" means the last reply is a question the work is blocked on, and answering it with agent.send is what unblocks it. Surface an explicit request for user input even if the status still says \"working\". Include the session URL when reporting a blocker or final outcome. On \"completed\", stop status checks and verify the requested result before claiming success. For new flows, validation, publication in the target environment, and readiness are separate checks; a Git push or final reply does not prove the flow is active. If every requested result is verified but status remains \"working\", report the mismatch and stop monitoring. Stop on \"failed\" or \"cancelled\" and report any confirmed partial result.";
22
+ readonly description: "Monitor a QA Wolf AI session by reading its status and replies. After agent.send, share the returned session URL before monitoring. Pass waitSeconds 45 so the server holds the check open and answers the moment something happens. Check again as soon as it returns; never sleep between checks or loop without waitSeconds. Pass the nextCursor from one response as the cursor on the next check; it then reads only what is new, and only for the session that minted it. Continue monitoring silently when the status is unchanged and no replies come back; do not narrate waiting, announce the next check, or ask whether to keep monitoring. Report only substantive new progress, questions, blockers, or the final outcome. A status of \"waiting-for-you\" means the last reply is a question the work is blocked on, and answering it with agent.send is what unblocks it. Surface an explicit request for user input even if the status still says \"working\". Include the session URL when reporting a blocker or final outcome. On \"completed\", stop status checks and verify the requested result before claiming success. For new flows, validation, publication in the target environment, and readiness are separate checks; a Git push or final reply does not prove the flow is active. If every requested result is verified but status remains \"working\", report the mismatch and stop monitoring. Stop on \"failed\" or \"cancelled\" and report any confirmed partial result.";
23
23
  readonly input: z.ZodObject<{
24
24
  cursor: z.ZodOptional<z.ZodString>;
25
25
  sessionId: ChatSessionId;
26
+ waitSeconds: z.ZodOptional<z.ZodNumber>;
26
27
  }, z.core.$strip>;
27
28
  readonly kind: "read";
28
29
  readonly name: "agent.get";
@@ -41,6 +42,12 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
41
42
  failed: "failed";
42
43
  cancelled: "cancelled";
43
44
  }>;
45
+ waitSeconds: z.ZodOptional<z.ZodNumber>;
46
+ wokeOn: z.ZodOptional<z.ZodEnum<{
47
+ reply: "reply";
48
+ status: "status";
49
+ timeout: "timeout";
50
+ }>>;
44
51
  url: z.ZodURL;
45
52
  }, z.core.$strip>;
46
53
  };
@@ -50,7 +57,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
50
57
  readonly openWorldHint: true;
51
58
  readonly readOnlyHint: false;
52
59
  };
53
- readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, make the next action a normal user-visible assistant message containing the exact returned url, before any tool call or wait. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
60
+ readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, put the exact returned url in a normal user-visible assistant message, and repeat it in the last message of the turn: only a turn's trailing message is shown expanded. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
54
61
  readonly input: z.ZodObject<{
55
62
  environmentId: z.ZodOptional<PublicIdSchema>;
56
63
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -94,7 +101,194 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
94
101
  url: z.ZodURL;
95
102
  }, z.core.$strip>;
96
103
  };
104
+ codeHostIntegration: {
105
+ find: {
106
+ readonly annotations: {
107
+ readonly destructiveHint: false;
108
+ readonly openWorldHint: false;
109
+ readonly readOnlyHint: true;
110
+ };
111
+ readonly description: "List the workspace's code host integrations (GitHub or GitLab). A connected integration lets QA Wolf read repositories and receive the code host's webhooks. codeHostIntegration.listRepositories pages the repositories each integration covers.";
112
+ readonly input: z.ZodObject<{
113
+ workspaceId: z.ZodOptional<WorkspaceId>;
114
+ }, z.core.$strip>;
115
+ readonly kind: "read";
116
+ readonly name: "codeHostIntegration.find";
117
+ readonly output: z.ZodObject<{
118
+ integrations: z.ZodArray<z.ZodObject<{
119
+ connectedAt: z.ZodISODateTime;
120
+ provider: z.ZodEnum<{
121
+ github: "github";
122
+ gitlab: "gitlab";
123
+ }>;
124
+ suspendedAt: z.ZodOptional<z.ZodISODateTime>;
125
+ url: z.ZodURL;
126
+ }, z.core.$strip>>;
127
+ settingsUrl: z.ZodURL;
128
+ }, z.core.$strip>;
129
+ };
130
+ listRepositories: {
131
+ readonly annotations: {
132
+ readonly destructiveHint: false;
133
+ readonly openWorldHint: false;
134
+ readonly readOnlyHint: true;
135
+ };
136
+ readonly description: "List the repositories the workspace's code host integrations cover, alphabetical by full name. The list reflects the last sync from the code host; codeHostIntegration.find lists the integrations themselves.";
137
+ readonly input: z.ZodObject<{
138
+ cursor: z.ZodOptional<z.ZodString>;
139
+ limit: z.ZodDefault<z.ZodNumber>;
140
+ provider: z.ZodOptional<z.ZodEnum<{
141
+ github: "github";
142
+ gitlab: "gitlab";
143
+ }>>;
144
+ workspaceId: z.ZodOptional<WorkspaceId>;
145
+ }, z.core.$strip>;
146
+ readonly kind: "read";
147
+ readonly name: "codeHostIntegration.listRepositories";
148
+ readonly output: z.ZodObject<{
149
+ nextCursor: z.ZodOptional<z.ZodString>;
150
+ repositories: z.ZodArray<z.ZodObject<{
151
+ fullName: z.ZodString;
152
+ provider: z.ZodEnum<{
153
+ github: "github";
154
+ gitlab: "gitlab";
155
+ }>;
156
+ url: z.ZodURL;
157
+ }, z.core.$strip>>;
158
+ }, z.core.$strip>;
159
+ };
160
+ };
97
161
  deployment: {
162
+ find: {
163
+ readonly annotations: {
164
+ readonly destructiveHint: false;
165
+ readonly openWorldHint: false;
166
+ readonly readOnlyHint: true;
167
+ };
168
+ readonly description: "List the deployments QA Wolf has received for the workspace, newest first. A deployment arrives through a code host integration's webhook or through deployment.reportStatus, and is what a deployment trigger evaluates against. deployment.listTriggerEvaluations reports each trigger's verdict for one deployment.";
169
+ readonly input: z.ZodObject<{
170
+ cursor: z.ZodOptional<z.ZodString>;
171
+ limit: z.ZodDefault<z.ZodNumber>;
172
+ workspaceId: z.ZodOptional<WorkspaceId>;
173
+ }, z.core.$strip>;
174
+ readonly kind: "read";
175
+ readonly name: "deployment.find";
176
+ readonly output: z.ZodObject<{
177
+ deployments: z.ZodArray<z.ZodObject<{
178
+ branch: z.ZodOptional<z.ZodString>;
179
+ commitAuthorName: z.ZodOptional<z.ZodString>;
180
+ commitMessage: z.ZodOptional<z.ZodString>;
181
+ commitSha: z.ZodOptional<z.ZodString>;
182
+ deployedAt: z.ZodISODateTime;
183
+ deployTarget: z.ZodOptional<z.ZodString>;
184
+ environmentId: EnvironmentId;
185
+ environmentName: z.ZodOptional<z.ZodString>;
186
+ id: DeploymentId;
187
+ provider: z.ZodOptional<z.ZodEnum<{
188
+ github: "github";
189
+ gitlab: "gitlab";
190
+ api: "api";
191
+ }>>;
192
+ status: z.ZodOptional<z.ZodEnum<{
193
+ success: "success";
194
+ pending: "pending";
195
+ failure: "failure";
196
+ inactive: "inactive";
197
+ }>>;
198
+ url: z.ZodURL;
199
+ }, z.core.$strip>>;
200
+ nextCursor: z.ZodOptional<z.ZodString>;
201
+ }, z.core.$strip>;
202
+ };
203
+ listTriggerEvaluations: {
204
+ readonly annotations: {
205
+ readonly destructiveHint: false;
206
+ readonly openWorldHint: false;
207
+ readonly readOnlyHint: true;
208
+ };
209
+ readonly description: "List the per-trigger verdicts recorded when a deployment was evaluated against the workspace's triggers. Each verdict says whether the trigger matched, did not match with the reason per condition, or was never considered and why. Verdicts are a snapshot from evaluation time: editing or deleting a trigger later does not change them.";
210
+ readonly input: z.ZodObject<{
211
+ deploymentId: DeploymentId;
212
+ }, z.core.$strip>;
213
+ readonly kind: "read";
214
+ readonly name: "deployment.listTriggerEvaluations";
215
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
216
+ evaluations: z.ZodArray<z.ZodObject<{
217
+ triggerId: z.ZodOptional<TriggerId>;
218
+ triggerName: z.ZodString;
219
+ verdict: z.ZodDiscriminatedUnion<[z.ZodObject<{
220
+ conditionSets: z.ZodArray<z.ZodObject<{
221
+ conditions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
222
+ kind: z.ZodEnum<{
223
+ branch: "branch";
224
+ deployTarget: "deployTarget";
225
+ environment: "environment";
226
+ }>;
227
+ outcome: z.ZodLiteral<"matched">;
228
+ }, z.core.$strip>, z.ZodObject<{
229
+ kind: z.ZodEnum<{
230
+ branch: "branch";
231
+ deployTarget: "deployTarget";
232
+ environment: "environment";
233
+ }>;
234
+ outcome: z.ZodLiteral<"did-not-match">;
235
+ reason: z.ZodString;
236
+ }, z.core.$strip>], "outcome">>;
237
+ outcome: z.ZodEnum<{
238
+ matched: "matched";
239
+ "did-not-match": "did-not-match";
240
+ }>;
241
+ }, z.core.$strip>>;
242
+ outcome: z.ZodLiteral<"matched">;
243
+ run: z.ZodDiscriminatedUnion<[z.ZodObject<{
244
+ runId: RunId;
245
+ status: z.ZodLiteral<"ran">;
246
+ }, z.core.$strip>, z.ZodObject<{
247
+ status: z.ZodLiteral<"starting">;
248
+ }, z.core.$strip>, z.ZodObject<{
249
+ reason: z.ZodString;
250
+ status: z.ZodLiteral<"did-not-run">;
251
+ supersededByRunId: z.ZodOptional<RunId>;
252
+ }, z.core.$strip>, z.ZodObject<{
253
+ status: z.ZodLiteral<"unknown">;
254
+ }, z.core.$strip>], "status">;
255
+ }, z.core.$strip>, z.ZodObject<{
256
+ conditionSets: z.ZodArray<z.ZodObject<{
257
+ conditions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
258
+ kind: z.ZodEnum<{
259
+ branch: "branch";
260
+ deployTarget: "deployTarget";
261
+ environment: "environment";
262
+ }>;
263
+ outcome: z.ZodLiteral<"matched">;
264
+ }, z.core.$strip>, z.ZodObject<{
265
+ kind: z.ZodEnum<{
266
+ branch: "branch";
267
+ deployTarget: "deployTarget";
268
+ environment: "environment";
269
+ }>;
270
+ outcome: z.ZodLiteral<"did-not-match">;
271
+ reason: z.ZodString;
272
+ }, z.core.$strip>], "outcome">>;
273
+ outcome: z.ZodEnum<{
274
+ matched: "matched";
275
+ "did-not-match": "did-not-match";
276
+ }>;
277
+ }, z.core.$strip>>;
278
+ outcome: z.ZodLiteral<"did-not-match">;
279
+ }, z.core.$strip>, z.ZodObject<{
280
+ outcome: z.ZodLiteral<"not-considered">;
281
+ reason: z.ZodEnum<{
282
+ "trigger-paused": "trigger-paused";
283
+ "not-a-deployment-trigger": "not-a-deployment-trigger";
284
+ }>;
285
+ }, z.core.$strip>], "outcome">;
286
+ }, z.core.$strip>>;
287
+ state: z.ZodLiteral<"evaluated">;
288
+ }, z.core.$strip>, z.ZodObject<{
289
+ state: z.ZodLiteral<"not-evaluated">;
290
+ }, z.core.$strip>], "state">;
291
+ };
98
292
  reportStatus: {
99
293
  readonly annotations: {
100
294
  readonly destructiveHint: true;
@@ -133,7 +327,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
133
327
  readonly name: "deployment.reportStatus";
134
328
  readonly output: z.ZodObject<{
135
329
  deployment: z.ZodObject<{
136
- id: PublicIdSchema;
330
+ id: DeploymentId;
137
331
  status: z.ZodEnum<{
138
332
  success: "success";
139
333
  pending: "pending";
@@ -386,6 +580,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
386
580
  running: "running";
387
581
  }>;
388
582
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
583
+ variablesUrl: z.ZodOptional<z.ZodURL>;
389
584
  url: z.ZodURL;
390
585
  }, z.core.$strip>;
391
586
  };
@@ -453,6 +648,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
453
648
  running: "running";
454
649
  }>;
455
650
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
651
+ variablesUrl: z.ZodOptional<z.ZodURL>;
456
652
  url: z.ZodURL;
457
653
  }, z.core.$strip>>;
458
654
  nextCursor: z.ZodOptional<z.ZodString>;
@@ -496,6 +692,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
496
692
  running: "running";
497
693
  }>;
498
694
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
695
+ variablesUrl: z.ZodOptional<z.ZodURL>;
499
696
  url: z.ZodURL;
500
697
  }, z.core.$strip>;
501
698
  };
@@ -597,6 +794,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
597
794
  running: "running";
598
795
  }>;
599
796
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
797
+ variablesUrl: z.ZodOptional<z.ZodURL>;
600
798
  url: z.ZodURL;
601
799
  }, z.core.$strip>;
602
800
  };
@@ -1793,7 +1991,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1793
1991
  readonly openWorldHint: false;
1794
1992
  readonly readOnlyHint: false;
1795
1993
  };
1796
- readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. After a successful launch, make the next action a normal user-visible assistant message containing the exact returned `url`, before the first browser action. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
1994
+ readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. A success means the runner is answering: the call waits for the pod it started to come up, so the very next call to the runner reaches it. If the pod does not come up in time the call fails instead, leaving the runner running — launching the same id again attaches to it. After a successful launch, put the exact returned `url` in a normal user-visible assistant message so they can watch while the browser is driven. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
1797
1995
  readonly input: z.ZodObject<{
1798
1996
  id: z.ZodString;
1799
1997
  runnerName: z.ZodOptional<z.ZodEnum<{
@@ -1853,7 +2051,7 @@ export declare const makeContractsV1: <EnvironmentId extends PublicIdSchema, Flo
1853
2051
  readonly openWorldHint: true;
1854
2052
  readonly readOnlyHint: false;
1855
2053
  };
1856
- readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused. With `withScreenshot: true`, the answer also carries `imageJpegBase64`: a screenshot taken after the action, once the screen has changed from just before it or half a second has passed, whichever comes first. One call instead of `runner.performAction` followed by `runner.takeScreenshot`, with no fixed wait in between. Anything animating on the page counts as a change. The action itself is performed exactly as without the option; if the screen could serve no frame after it — a display restart, or a `navigate` on a desktop that is still starting — the action's result comes back without `imageJpegBase64`, so take a screenshot separately rather than repeating the action. On a mobile runner the screenshot is the device's own, taken right after a performed action. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
2054
+ readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. One action per request, and the runner serves one at a time. A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
1857
2055
  readonly input: z.ZodObject<{
1858
2056
  action: z.ZodDiscriminatedUnion<[z.ZodObject<{
1859
2057
  button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;
@@ -2646,10 +2844,11 @@ export declare const publicContractsV1: {
2646
2844
  readonly openWorldHint: false;
2647
2845
  readonly readOnlyHint: true;
2648
2846
  };
2649
- readonly description: "Monitor a QA Wolf AI session by reading its status and replies. After agent.send, share the returned session URL before monitoring. Wait 30 to 60 seconds between checks; do not call this in a tight loop. Pass the nextCursor from one response as the cursor on the next check; it then reads only what is new, and only for the session that minted it. Continue monitoring silently when the status is unchanged and no replies come back; do not narrate waiting, announce the next check, or ask whether to keep monitoring. Report only substantive new progress, questions, blockers, or the final outcome. A status of \"waiting-for-you\" means the last reply is a question the work is blocked on, and answering it with agent.send is what unblocks it. Surface an explicit request for user input even if the status still says \"working\". Include the session URL when reporting a blocker or final outcome. On \"completed\", stop status checks and verify the requested result before claiming success. For new flows, validation, publication in the target environment, and readiness are separate checks; a Git push or final reply does not prove the flow is active. If every requested result is verified but status remains \"working\", report the mismatch and stop monitoring. Stop on \"failed\" or \"cancelled\" and report any confirmed partial result.";
2847
+ readonly description: "Monitor a QA Wolf AI session by reading its status and replies. After agent.send, share the returned session URL before monitoring. Pass waitSeconds 45 so the server holds the check open and answers the moment something happens. Check again as soon as it returns; never sleep between checks or loop without waitSeconds. Pass the nextCursor from one response as the cursor on the next check; it then reads only what is new, and only for the session that minted it. Continue monitoring silently when the status is unchanged and no replies come back; do not narrate waiting, announce the next check, or ask whether to keep monitoring. Report only substantive new progress, questions, blockers, or the final outcome. A status of \"waiting-for-you\" means the last reply is a question the work is blocked on, and answering it with agent.send is what unblocks it. Surface an explicit request for user input even if the status still says \"working\". Include the session URL when reporting a blocker or final outcome. On \"completed\", stop status checks and verify the requested result before claiming success. For new flows, validation, publication in the target environment, and readiness are separate checks; a Git push or final reply does not prove the flow is active. If every requested result is verified but status remains \"working\", report the mismatch and stop monitoring. Stop on \"failed\" or \"cancelled\" and report any confirmed partial result.";
2650
2848
  readonly input: z.ZodObject<{
2651
2849
  cursor: z.ZodOptional<z.ZodString>;
2652
2850
  sessionId: PublicIdSchema;
2851
+ waitSeconds: z.ZodOptional<z.ZodNumber>;
2653
2852
  }, z.core.$strip>;
2654
2853
  readonly kind: "read";
2655
2854
  readonly name: "agent.get";
@@ -2668,6 +2867,12 @@ export declare const publicContractsV1: {
2668
2867
  failed: "failed";
2669
2868
  cancelled: "cancelled";
2670
2869
  }>;
2870
+ waitSeconds: z.ZodOptional<z.ZodNumber>;
2871
+ wokeOn: z.ZodOptional<z.ZodEnum<{
2872
+ reply: "reply";
2873
+ status: "status";
2874
+ timeout: "timeout";
2875
+ }>>;
2671
2876
  url: z.ZodURL;
2672
2877
  }, z.core.$strip>;
2673
2878
  };
@@ -2677,7 +2882,7 @@ export declare const publicContractsV1: {
2677
2882
  readonly openWorldHint: true;
2678
2883
  readonly readOnlyHint: false;
2679
2884
  };
2680
- readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, make the next action a normal user-visible assistant message containing the exact returned url, before any tool call or wait. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
2885
+ readonly description: "Start or continue work with the QA Wolf AI and return a live session URL to share with the user. Use it to cover a user journey, investigate a failing run, or fix a broken flow. This is the one verb that starts work from nothing: every other write acts on a flow, run or issue that already exists. Returns sessionId, status, and url as soon as the request is accepted; work can take minutes to tens of minutes. After each send, put the exact returned url in a normal user-visible assistant message, and repeat it in the last message of the turn: only a turn's trailing message is shown expanded. Tool output and internal reasoning do not count as sharing the link. Do not run a timer or monitoring call alongside this send. Acceptance does not mean the work is complete. Then monitor the session with agent.get, reporting new progress, blockers, and the final outcome rather than unchanged status. Send here again to answer a question or add context to the same session.";
2681
2886
  readonly input: z.ZodObject<{
2682
2887
  environmentId: z.ZodOptional<PublicIdSchema>;
2683
2888
  filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -2721,7 +2926,194 @@ export declare const publicContractsV1: {
2721
2926
  url: z.ZodURL;
2722
2927
  }, z.core.$strip>;
2723
2928
  };
2929
+ codeHostIntegration: {
2930
+ find: {
2931
+ readonly annotations: {
2932
+ readonly destructiveHint: false;
2933
+ readonly openWorldHint: false;
2934
+ readonly readOnlyHint: true;
2935
+ };
2936
+ readonly description: "List the workspace's code host integrations (GitHub or GitLab). A connected integration lets QA Wolf read repositories and receive the code host's webhooks. codeHostIntegration.listRepositories pages the repositories each integration covers.";
2937
+ readonly input: z.ZodObject<{
2938
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2939
+ }, z.core.$strip>;
2940
+ readonly kind: "read";
2941
+ readonly name: "codeHostIntegration.find";
2942
+ readonly output: z.ZodObject<{
2943
+ integrations: z.ZodArray<z.ZodObject<{
2944
+ connectedAt: z.ZodISODateTime;
2945
+ provider: z.ZodEnum<{
2946
+ github: "github";
2947
+ gitlab: "gitlab";
2948
+ }>;
2949
+ suspendedAt: z.ZodOptional<z.ZodISODateTime>;
2950
+ url: z.ZodURL;
2951
+ }, z.core.$strip>>;
2952
+ settingsUrl: z.ZodURL;
2953
+ }, z.core.$strip>;
2954
+ };
2955
+ listRepositories: {
2956
+ readonly annotations: {
2957
+ readonly destructiveHint: false;
2958
+ readonly openWorldHint: false;
2959
+ readonly readOnlyHint: true;
2960
+ };
2961
+ readonly description: "List the repositories the workspace's code host integrations cover, alphabetical by full name. The list reflects the last sync from the code host; codeHostIntegration.find lists the integrations themselves.";
2962
+ readonly input: z.ZodObject<{
2963
+ cursor: z.ZodOptional<z.ZodString>;
2964
+ limit: z.ZodDefault<z.ZodNumber>;
2965
+ provider: z.ZodOptional<z.ZodEnum<{
2966
+ github: "github";
2967
+ gitlab: "gitlab";
2968
+ }>>;
2969
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2970
+ }, z.core.$strip>;
2971
+ readonly kind: "read";
2972
+ readonly name: "codeHostIntegration.listRepositories";
2973
+ readonly output: z.ZodObject<{
2974
+ nextCursor: z.ZodOptional<z.ZodString>;
2975
+ repositories: z.ZodArray<z.ZodObject<{
2976
+ fullName: z.ZodString;
2977
+ provider: z.ZodEnum<{
2978
+ github: "github";
2979
+ gitlab: "gitlab";
2980
+ }>;
2981
+ url: z.ZodURL;
2982
+ }, z.core.$strip>>;
2983
+ }, z.core.$strip>;
2984
+ };
2985
+ };
2724
2986
  deployment: {
2987
+ find: {
2988
+ readonly annotations: {
2989
+ readonly destructiveHint: false;
2990
+ readonly openWorldHint: false;
2991
+ readonly readOnlyHint: true;
2992
+ };
2993
+ readonly description: "List the deployments QA Wolf has received for the workspace, newest first. A deployment arrives through a code host integration's webhook or through deployment.reportStatus, and is what a deployment trigger evaluates against. deployment.listTriggerEvaluations reports each trigger's verdict for one deployment.";
2994
+ readonly input: z.ZodObject<{
2995
+ cursor: z.ZodOptional<z.ZodString>;
2996
+ limit: z.ZodDefault<z.ZodNumber>;
2997
+ workspaceId: z.ZodOptional<PublicIdSchema>;
2998
+ }, z.core.$strip>;
2999
+ readonly kind: "read";
3000
+ readonly name: "deployment.find";
3001
+ readonly output: z.ZodObject<{
3002
+ deployments: z.ZodArray<z.ZodObject<{
3003
+ branch: z.ZodOptional<z.ZodString>;
3004
+ commitAuthorName: z.ZodOptional<z.ZodString>;
3005
+ commitMessage: z.ZodOptional<z.ZodString>;
3006
+ commitSha: z.ZodOptional<z.ZodString>;
3007
+ deployedAt: z.ZodISODateTime;
3008
+ deployTarget: z.ZodOptional<z.ZodString>;
3009
+ environmentId: PublicIdSchema;
3010
+ environmentName: z.ZodOptional<z.ZodString>;
3011
+ id: PublicIdSchema;
3012
+ provider: z.ZodOptional<z.ZodEnum<{
3013
+ github: "github";
3014
+ gitlab: "gitlab";
3015
+ api: "api";
3016
+ }>>;
3017
+ status: z.ZodOptional<z.ZodEnum<{
3018
+ success: "success";
3019
+ pending: "pending";
3020
+ failure: "failure";
3021
+ inactive: "inactive";
3022
+ }>>;
3023
+ url: z.ZodURL;
3024
+ }, z.core.$strip>>;
3025
+ nextCursor: z.ZodOptional<z.ZodString>;
3026
+ }, z.core.$strip>;
3027
+ };
3028
+ listTriggerEvaluations: {
3029
+ readonly annotations: {
3030
+ readonly destructiveHint: false;
3031
+ readonly openWorldHint: false;
3032
+ readonly readOnlyHint: true;
3033
+ };
3034
+ readonly description: "List the per-trigger verdicts recorded when a deployment was evaluated against the workspace's triggers. Each verdict says whether the trigger matched, did not match with the reason per condition, or was never considered and why. Verdicts are a snapshot from evaluation time: editing or deleting a trigger later does not change them.";
3035
+ readonly input: z.ZodObject<{
3036
+ deploymentId: PublicIdSchema;
3037
+ }, z.core.$strip>;
3038
+ readonly kind: "read";
3039
+ readonly name: "deployment.listTriggerEvaluations";
3040
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
3041
+ evaluations: z.ZodArray<z.ZodObject<{
3042
+ triggerId: z.ZodOptional<PublicIdSchema>;
3043
+ triggerName: z.ZodString;
3044
+ verdict: z.ZodDiscriminatedUnion<[z.ZodObject<{
3045
+ conditionSets: z.ZodArray<z.ZodObject<{
3046
+ conditions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
3047
+ kind: z.ZodEnum<{
3048
+ branch: "branch";
3049
+ deployTarget: "deployTarget";
3050
+ environment: "environment";
3051
+ }>;
3052
+ outcome: z.ZodLiteral<"matched">;
3053
+ }, z.core.$strip>, z.ZodObject<{
3054
+ kind: z.ZodEnum<{
3055
+ branch: "branch";
3056
+ deployTarget: "deployTarget";
3057
+ environment: "environment";
3058
+ }>;
3059
+ outcome: z.ZodLiteral<"did-not-match">;
3060
+ reason: z.ZodString;
3061
+ }, z.core.$strip>], "outcome">>;
3062
+ outcome: z.ZodEnum<{
3063
+ matched: "matched";
3064
+ "did-not-match": "did-not-match";
3065
+ }>;
3066
+ }, z.core.$strip>>;
3067
+ outcome: z.ZodLiteral<"matched">;
3068
+ run: z.ZodDiscriminatedUnion<[z.ZodObject<{
3069
+ runId: PublicIdSchema;
3070
+ status: z.ZodLiteral<"ran">;
3071
+ }, z.core.$strip>, z.ZodObject<{
3072
+ status: z.ZodLiteral<"starting">;
3073
+ }, z.core.$strip>, z.ZodObject<{
3074
+ reason: z.ZodString;
3075
+ status: z.ZodLiteral<"did-not-run">;
3076
+ supersededByRunId: z.ZodOptional<PublicIdSchema>;
3077
+ }, z.core.$strip>, z.ZodObject<{
3078
+ status: z.ZodLiteral<"unknown">;
3079
+ }, z.core.$strip>], "status">;
3080
+ }, z.core.$strip>, z.ZodObject<{
3081
+ conditionSets: z.ZodArray<z.ZodObject<{
3082
+ conditions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
3083
+ kind: z.ZodEnum<{
3084
+ branch: "branch";
3085
+ deployTarget: "deployTarget";
3086
+ environment: "environment";
3087
+ }>;
3088
+ outcome: z.ZodLiteral<"matched">;
3089
+ }, z.core.$strip>, z.ZodObject<{
3090
+ kind: z.ZodEnum<{
3091
+ branch: "branch";
3092
+ deployTarget: "deployTarget";
3093
+ environment: "environment";
3094
+ }>;
3095
+ outcome: z.ZodLiteral<"did-not-match">;
3096
+ reason: z.ZodString;
3097
+ }, z.core.$strip>], "outcome">>;
3098
+ outcome: z.ZodEnum<{
3099
+ matched: "matched";
3100
+ "did-not-match": "did-not-match";
3101
+ }>;
3102
+ }, z.core.$strip>>;
3103
+ outcome: z.ZodLiteral<"did-not-match">;
3104
+ }, z.core.$strip>, z.ZodObject<{
3105
+ outcome: z.ZodLiteral<"not-considered">;
3106
+ reason: z.ZodEnum<{
3107
+ "trigger-paused": "trigger-paused";
3108
+ "not-a-deployment-trigger": "not-a-deployment-trigger";
3109
+ }>;
3110
+ }, z.core.$strip>], "outcome">;
3111
+ }, z.core.$strip>>;
3112
+ state: z.ZodLiteral<"evaluated">;
3113
+ }, z.core.$strip>, z.ZodObject<{
3114
+ state: z.ZodLiteral<"not-evaluated">;
3115
+ }, z.core.$strip>], "state">;
3116
+ };
2725
3117
  reportStatus: {
2726
3118
  readonly annotations: {
2727
3119
  readonly destructiveHint: true;
@@ -3013,6 +3405,7 @@ export declare const publicContractsV1: {
3013
3405
  running: "running";
3014
3406
  }>;
3015
3407
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3408
+ variablesUrl: z.ZodOptional<z.ZodURL>;
3016
3409
  url: z.ZodURL;
3017
3410
  }, z.core.$strip>;
3018
3411
  };
@@ -3080,6 +3473,7 @@ export declare const publicContractsV1: {
3080
3473
  running: "running";
3081
3474
  }>;
3082
3475
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3476
+ variablesUrl: z.ZodOptional<z.ZodURL>;
3083
3477
  url: z.ZodURL;
3084
3478
  }, z.core.$strip>>;
3085
3479
  nextCursor: z.ZodOptional<z.ZodString>;
@@ -3123,6 +3517,7 @@ export declare const publicContractsV1: {
3123
3517
  running: "running";
3124
3518
  }>;
3125
3519
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3520
+ variablesUrl: z.ZodOptional<z.ZodURL>;
3126
3521
  url: z.ZodURL;
3127
3522
  }, z.core.$strip>;
3128
3523
  };
@@ -3224,6 +3619,7 @@ export declare const publicContractsV1: {
3224
3619
  running: "running";
3225
3620
  }>;
3226
3621
  terminatedAt: z.ZodOptional<z.ZodISODateTime>;
3622
+ variablesUrl: z.ZodOptional<z.ZodURL>;
3227
3623
  url: z.ZodURL;
3228
3624
  }, z.core.$strip>;
3229
3625
  };
@@ -4420,7 +4816,7 @@ export declare const publicContractsV1: {
4420
4816
  readonly openWorldHint: false;
4421
4817
  readonly readOnlyHint: false;
4422
4818
  };
4423
- readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. After a successful launch, make the next action a normal user-visible assistant message containing the exact returned `url`, before the first browser action. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
4819
+ readonly description: "Launch an interactive runner on the caller's team under an id the caller chooses. Launching the same id again returns the runner already running rather than starting a second one, and the same id with a different runnerName is refused. A runner is not permanent: it terminates on its own after a period of inactivity, and launching the same id after that starts and bills a new runner — so read `alreadyRunning` to tell which happened. A success means the runner is answering: the call waits for the pod it started to come up, so the very next call to the runner reaches it. If the pod does not come up in time the call fails instead, leaving the runner running — launching the same id again attaches to it. After a successful launch, put the exact returned `url` in a normal user-visible assistant message so they can watch while the browser is driven. Tool output and internal reasoning do not count as sharing the link. When `alreadyRunning` is true the `url` is the same page, so share it again instead of assuming the caller still has it.";
4424
4820
  readonly input: z.ZodObject<{
4425
4821
  id: z.ZodString;
4426
4822
  runnerName: z.ZodOptional<z.ZodEnum<{
@@ -4480,7 +4876,7 @@ export declare const publicContractsV1: {
4480
4876
  readonly openWorldHint: true;
4481
4877
  readonly readOnlyHint: false;
4482
4878
  };
4483
- readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as `runner.takeScreenshot`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus `screenshot` (use `runner.takeScreenshot`) and `wait` (delay on the caller's side). A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. A `navigate` does not go through the screen, so a screen that is not ready does not stop it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `action-not-supported-on-mobile` if the runner is a mobile device and this action has no touchscreen equivalent: `double_click`, `scroll`, `move`, `keypress` and `navigate`, and a `click` whose `button` is not `left`, are all pointer-device concepts a touchscreen has nothing to offer for. `click` taps, `drag` swipes between its path's first and last point, and `type` types into whatever the last tap focused. With `withScreenshot: true`, the answer also carries `imageJpegBase64`: a screenshot taken after the action, once the screen has changed from just before it or half a second has passed, whichever comes first. One call instead of `runner.performAction` followed by `runner.takeScreenshot`, with no fixed wait in between. Anything animating on the page counts as a change. The action itself is performed exactly as without the option; if the screen could serve no frame after it — a display restart, or a `navigate` on a desktop that is still starting — the action's result comes back without `imageJpegBase64`, so take a screenshot separately rather than repeating the action. On a mobile runner the screenshot is the device's own, taken right after a performed action. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
4879
+ readonly description: "Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. One action per request, and the runner serves one at a time. A success means the action took effect. `action-failed`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no `runner.runFlow` is needed before acting; if the browser is still starting when the wait runs out, the answer is `screen-not-ready` and retrying converges. On a mobile runner, the same `screen-needs-a-run` and `screen-not-ready` outcomes mean no Appium session has started yet, or it did not answer this instant; `runner.runFlow` is what starts one, same as a browser. `screen-needs-a-run` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call `runner.runFlow` with a flow that opens a browser. `screen-not-ready` if the runner has a screen that cannot serve this instant. Retry in a second or two: the desktop restarts when a run changes the display size, and it serves one see-or-act request at a time, so a screenshot or action already in flight is the usual reason. Do not submit a run to clear this — a run may restart the display and discard what is on it. `runner-has-no-screen` if this runner is not one that runs a browser on a virtual desktop. Nothing about it can be seen or driven, and retrying will never help — launch a `playwright` runner instead. `runner-unreachable` if the runner could not be reached: it may still be starting, it may have terminated after inactivity, or it may have stopped answering mid-action. This does not mean the action was not performed — take a screenshot before repeating it.";
4484
4880
  readonly input: z.ZodObject<{
4485
4881
  action: z.ZodDiscriminatedUnion<[z.ZodObject<{
4486
4882
  button: z.ZodLiteral<"left" | "right" | "wheel" | "back" | "forward">;