@qawolf/api-contracts 0.67.0 → 0.69.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 (51) hide show
  1. package/README.md +0 -2
  2. package/dist/v1/agent/status.js +1 -1
  3. package/dist/v1/agent/status.js.map +1 -1
  4. package/dist/v1/index.d.ts +436 -0
  5. package/dist/v1/index.d.ts.map +1 -1
  6. package/dist/v1/index.js +2 -0
  7. package/dist/v1/index.js.map +1 -1
  8. package/dist/v1/investigation/finding.d.ts +51 -0
  9. package/dist/v1/investigation/finding.d.ts.map +1 -0
  10. package/dist/v1/investigation/finding.js +55 -0
  11. package/dist/v1/investigation/finding.js.map +1 -0
  12. package/dist/v1/investigation/findingInputFields.d.ts +14 -0
  13. package/dist/v1/investigation/findingInputFields.d.ts.map +1 -0
  14. package/dist/v1/investigation/findingInputFields.js +46 -0
  15. package/dist/v1/investigation/findingInputFields.js.map +1 -0
  16. package/dist/v1/investigation/get.d.ts +74 -0
  17. package/dist/v1/investigation/get.d.ts.map +1 -0
  18. package/dist/v1/investigation/get.js +30 -0
  19. package/dist/v1/investigation/get.js.map +1 -0
  20. package/dist/v1/investigation/index.d.ts +219 -0
  21. package/dist/v1/investigation/index.d.ts.map +1 -0
  22. package/dist/v1/investigation/index.js +7 -0
  23. package/dist/v1/investigation/index.js.map +1 -0
  24. package/dist/v1/investigation/recordFinding.d.ts +153 -0
  25. package/dist/v1/investigation/recordFinding.d.ts.map +1 -0
  26. package/dist/v1/investigation/recordFinding.js +112 -0
  27. package/dist/v1/investigation/recordFinding.js.map +1 -0
  28. package/dist/v1/mcpInputSchema.d.ts +6 -0
  29. package/dist/v1/mcpInputSchema.d.ts.map +1 -1
  30. package/dist/v1/mcpInputSchema.js +51 -20
  31. package/dist/v1/mcpInputSchema.js.map +1 -1
  32. package/dist/v1/mcpInputShape.d.ts +13 -0
  33. package/dist/v1/mcpInputShape.d.ts.map +1 -0
  34. package/dist/v1/mcpInputShape.js +31 -0
  35. package/dist/v1/mcpInputShape.js.map +1 -0
  36. package/dist/v1/mcpInputUnion.d.ts +3 -0
  37. package/dist/v1/mcpInputUnion.d.ts.map +1 -0
  38. package/dist/v1/mcpInputUnion.js +83 -0
  39. package/dist/v1/mcpInputUnion.js.map +1 -0
  40. package/dist/v1/mcpToolDescription.d.ts.map +1 -1
  41. package/dist/v1/mcpToolDescription.js +2 -0
  42. package/dist/v1/mcpToolDescription.js.map +1 -1
  43. package/dist/v1/run/get.d.ts +7 -0
  44. package/dist/v1/run/get.d.ts.map +1 -1
  45. package/dist/v1/run/get.js +14 -3
  46. package/dist/v1/run/get.js.map +1 -1
  47. package/dist/v1/run/summary.d.ts +2 -0
  48. package/dist/v1/run/summary.d.ts.map +1 -1
  49. package/dist/v1/run/summary.js +9 -1
  50. package/dist/v1/run/summary.js.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,112 @@
1
+ import { z } from "zod";
2
+ import { issuePrioritySchema } from "../issue/index.js";
3
+ import { makeInvestigationFindingSchema } from "./finding.js";
4
+ import { answerDescription, answerTitle, bugReport, commitHash, headline, matchReason, question, summary, } from "./findingInputFields.js";
5
+ export const makeRecordInvestigationFindingContract = (ids) => {
6
+ const common = {
7
+ findingId: z
8
+ .string()
9
+ .regex(/^[a-z0-9]+(-[a-z0-9]+)*$/)
10
+ .max(80)
11
+ .describe("Stable per cause, in kebab-case. Recording the same id again replaces the finding."),
12
+ flowIds: z
13
+ .array(ids.flow)
14
+ .min(1)
15
+ .max(100)
16
+ .refine((flowIds) => new Set(flowIds).size === flowIds.length, "flowIds must be unique")
17
+ .describe("The failed flows in the run that share this cause. A flow moves here from any other finding."),
18
+ runId: ids.run,
19
+ sessionId: ids.chatSession.describe("The run's investigation session, the only session that records its findings. Read it from investigation.get."),
20
+ subSessionIds: z
21
+ .array(ids.chatSession)
22
+ .max(50)
23
+ .optional()
24
+ .describe("The sub-sessions whose work went into this finding."),
25
+ };
26
+ const input = z.discriminatedUnion("state", [
27
+ z.object({
28
+ ...common,
29
+ headline: headline.optional(),
30
+ state: z.literal("investigating"),
31
+ summary: summary.optional(),
32
+ }),
33
+ z.object({
34
+ ...common,
35
+ commitHash,
36
+ headline,
37
+ state: z.literal("fixed"),
38
+ summary,
39
+ }),
40
+ z.object({
41
+ ...common,
42
+ commitHash,
43
+ headline,
44
+ question: question
45
+ .optional()
46
+ .describe('Defaults to "Should I update the test?".'),
47
+ state: z.literal("fix-proposed"),
48
+ summary,
49
+ }),
50
+ z.object({
51
+ ...common,
52
+ ...bugReport,
53
+ headline,
54
+ issueId: ids.issue.describe("The report the flows were filed under or added to."),
55
+ matchReason: matchReason.optional(),
56
+ state: z.literal("reported"),
57
+ summary,
58
+ }),
59
+ z.object({
60
+ ...common,
61
+ ...bugReport,
62
+ headline,
63
+ issueId: ids.issue
64
+ .optional()
65
+ .describe("An already open report the flows match."),
66
+ matchReason: matchReason.optional(),
67
+ priority: issuePrioritySchema,
68
+ question: question
69
+ .optional()
70
+ .describe('Defaults to "Is this what you expect?".'),
71
+ state: z.literal("report-proposed"),
72
+ summary,
73
+ }),
74
+ z.object({ ...common, headline, state: z.literal("flake"), summary }),
75
+ z.object({
76
+ ...common,
77
+ bugAnswer: answerTitle.describe("The answer that means the app is wrong."),
78
+ bugAnswerDescription: answerDescription
79
+ .optional()
80
+ .describe("What the AI does after that answer."),
81
+ headline,
82
+ maintenanceAnswer: answerTitle.describe("The answer that means the test is out of date."),
83
+ maintenanceAnswerDescription: answerDescription
84
+ .optional()
85
+ .describe("What the AI does after that answer."),
86
+ question,
87
+ state: z.literal("question"),
88
+ summary,
89
+ }),
90
+ ]);
91
+ const output = z.object({
92
+ finding: makeInvestigationFindingSchema(ids),
93
+ });
94
+ return {
95
+ annotations: {
96
+ destructiveHint: true,
97
+ openWorldHint: false,
98
+ readOnlyHint: false,
99
+ },
100
+ description: "Record what the QA Wolf AI investigating a run concluded about one cause of its failures. " +
101
+ 'state says what it concluded: "investigating" while sub-sessions work on the flows, "fixed" once a fix is published and the flows reattempted, ' +
102
+ '"fix-proposed" for a committed fix waiting for a person\'s approval, "reported" once the flows are filed or added to an open report, ' +
103
+ '"report-proposed" for a drafted report waiting for approval, "flake" when a reattempt passed with no change, ' +
104
+ 'and "question" when the AI can\'t tell whether the test or the app is wrong. ' +
105
+ "Each flow belongs to one finding at a time, and a finding a person decided can't be replaced.",
106
+ input,
107
+ kind: "write",
108
+ name: "investigation.recordFinding",
109
+ output,
110
+ };
111
+ };
112
+ //# sourceMappingURL=recordFinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordFinding.js","sourceRoot":"","sources":["../../../src/v1/investigation/recordFinding.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,11 @@ export type McpInputSchema = {
5
5
  required?: string[];
6
6
  type: "object";
7
7
  };
8
+ /**
9
+ * Converts a contract input to the JSON Schema an MCP tool advertises: always
10
+ * one flat object, with no `allOf`, `anyOf` or `oneOf` at the root. The
11
+ * contract still validates every call, so the rules a flat object cannot
12
+ * enforce, such as a field required for one kind only, stay enforced there.
13
+ */
8
14
  export declare function toMcpInputSchema(input: z.ZodType): McpInputSchema;
9
15
  //# sourceMappingURL=mcpInputSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcpInputSchema.d.ts","sourceRoot":"","sources":["../../src/v1/mcpInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AA2BF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,cAAc,CAYjE"}
1
+ {"version":3,"file":"mcpInputSchema.d.ts","sourceRoot":"","sources":["../../src/v1/mcpInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAsDF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,cAAc,CAYjE"}
@@ -1,30 +1,61 @@
1
1
  import { z } from "zod";
2
- function toObjectProperties(properties) {
3
- return Object.fromEntries(Object.entries(properties).map(([key, schema]) => {
4
- if (typeof schema !== "boolean")
5
- return [key, schema];
6
- return [key, schema ? {} : { not: {} }];
7
- }));
2
+ import { declarationsOf, oneOrAll, propertyNamesOf, toSchemaObject, unique, } from "./mcpInputShape.js";
3
+ import { mergeDiscriminatedUnion } from "./mcpInputUnion.js";
4
+ const structuralKeys = new Set([
5
+ "$schema",
6
+ "allOf",
7
+ "anyOf",
8
+ "oneOf",
9
+ "properties",
10
+ "required",
11
+ "type",
12
+ ]);
13
+ function mergeIntersection(shapes) {
14
+ return {
15
+ properties: Object.fromEntries(propertyNamesOf(shapes).map((name) => [
16
+ name,
17
+ oneOrAll(declarationsOf(shapes, name), "allOf"),
18
+ ])),
19
+ required: unique(shapes.flatMap((shape) => shape.required)),
20
+ };
8
21
  }
9
- function requiringWorkspaceId(schema) {
10
- const { allOf, properties, required = [] } = schema;
11
- const declaresWorkspaceId = properties !== undefined && "workspaceId" in properties;
22
+ function toObjectShape(schema) {
23
+ if (schema.allOf)
24
+ return mergeIntersection(schema.allOf.map(toObjectShape));
25
+ const alternatives = schema.oneOf ?? schema.anyOf;
26
+ if (alternatives)
27
+ return mergeDiscriminatedUnion(alternatives.map(toObjectShape));
28
+ if (schema.type !== "object") {
29
+ throw Error(`An MCP tool input must be an object schema, not ${schema.type ?? "an untyped schema"}.`);
30
+ }
12
31
  return {
13
- ...schema,
14
- ...(allOf ? { allOf: allOf.map(requiringWorkspaceId) } : {}),
15
- ...(declaresWorkspaceId && !required.includes("workspaceId")
16
- ? { required: [...required, "workspaceId"] }
17
- : {}),
32
+ properties: Object.fromEntries(Object.entries(schema.properties ?? {}).map(([name, property]) => [
33
+ name,
34
+ toSchemaObject(property),
35
+ ])),
36
+ required: schema.required ?? [],
18
37
  };
19
38
  }
39
+ function requiringWorkspaceId(shape) {
40
+ const declaresWorkspaceId = "workspaceId" in shape.properties;
41
+ if (!declaresWorkspaceId || shape.required.includes("workspaceId"))
42
+ return shape;
43
+ return { ...shape, required: [...shape.required, "workspaceId"] };
44
+ }
45
+ /**
46
+ * Converts a contract input to the JSON Schema an MCP tool advertises: always
47
+ * one flat object, with no `allOf`, `anyOf` or `oneOf` at the root. The
48
+ * contract still validates every call, so the rules a flat object cannot
49
+ * enforce, such as a field required for one kind only, stay enforced there.
50
+ */
20
51
  export function toMcpInputSchema(input) {
21
- const generated = requiringWorkspaceId(z.toJSONSchema(input, { io: "input" }));
22
- delete generated.$schema;
23
- const { properties, required, ...rest } = generated;
52
+ const generated = z.toJSONSchema(input, { io: "input" });
53
+ const shape = requiringWorkspaceId(toObjectShape(generated));
54
+ const annotations = Object.fromEntries(Object.entries(generated).filter(([key]) => !structuralKeys.has(key)));
24
55
  return {
25
- ...rest,
26
- ...(properties ? { properties: toObjectProperties(properties) } : {}),
27
- ...(required ? { required } : {}),
56
+ ...annotations,
57
+ properties: shape.properties,
58
+ ...(shape.required.length > 0 ? { required: shape.required } : {}),
28
59
  type: "object",
29
60
  };
30
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcpInputSchema.js","sourceRoot":"","sources":["../../src/v1/mcpInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,SAAS,kBAAkB,CACzB,UAA4C;IAE5C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;QAC/C,IAAI,OAAO,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IACpD,MAAM,mBAAmB,GACvB,UAAU,KAAK,SAAS,IAAI,aAAa,IAAI,UAAU,CAAC;IAE1D,OAAO;QACL,GAAG,MAAM;QACT,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1D,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,aAAa,CAAC,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,MAAM,SAAS,GAAG,oBAAoB,CACpC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;IACF,OAAO,SAAS,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;IACpD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mcpInputSchema.js","sourceRoot":"","sources":["../../src/v1/mcpInputSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { z } from "zod";
2
+ export type JsonSchema = z.core.JSONSchema.JSONSchema;
3
+ export type ObjectShape = {
4
+ properties: Record<string, JsonSchema>;
5
+ required: string[];
6
+ };
7
+ export declare function unique<Item>(items: Item[]): Item[];
8
+ export declare function toSchemaObject(schema: z.core.JSONSchema._JSONSchema): JsonSchema;
9
+ export declare function propertyOf(shape: ObjectShape, name: string): JsonSchema | undefined;
10
+ export declare function declarationsOf(shapes: ObjectShape[], name: string): JsonSchema[];
11
+ export declare function propertyNamesOf(shapes: ObjectShape[]): string[];
12
+ export declare function oneOrAll(schemas: JsonSchema[], combinator: "allOf" | "anyOf"): JsonSchema;
13
+ //# sourceMappingURL=mcpInputShape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpInputShape.d.ts","sourceRoot":"","sources":["../../src/v1/mcpInputShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAElD;AASD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,GACpC,UAAU,CAGZ;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,UAAU,GAAG,SAAS,CAExB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAKd;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,QAAQ,CACtB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,OAAO,GAAG,OAAO,GAC5B,UAAU,CAIZ"}
@@ -0,0 +1,31 @@
1
+ export function unique(items) {
2
+ return [...new Set(items)];
3
+ }
4
+ function distinctSchemas(schemas) {
5
+ const byJson = new Map(schemas.map((schema) => [JSON.stringify(schema), schema]));
6
+ return [...byJson.values()];
7
+ }
8
+ export function toSchemaObject(schema) {
9
+ if (typeof schema !== "boolean")
10
+ return schema;
11
+ return schema ? {} : { not: {} };
12
+ }
13
+ export function propertyOf(shape, name) {
14
+ return Object.entries(shape.properties).find(([key]) => key === name)?.[1];
15
+ }
16
+ export function declarationsOf(shapes, name) {
17
+ return shapes.flatMap((shape) => {
18
+ const property = propertyOf(shape, name);
19
+ return property === undefined ? [] : [property];
20
+ });
21
+ }
22
+ export function propertyNamesOf(shapes) {
23
+ return unique(shapes.flatMap((shape) => Object.keys(shape.properties)));
24
+ }
25
+ export function oneOrAll(schemas, combinator) {
26
+ const [only, ...others] = distinctSchemas(schemas);
27
+ if (!only)
28
+ throw Error("Cannot merge a property no branch declares.");
29
+ return others.length === 0 ? only : { [combinator]: [only, ...others] };
30
+ }
31
+ //# sourceMappingURL=mcpInputShape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpInputShape.js","sourceRoot":"","sources":["../../src/v1/mcpInputShape.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,MAAM,CAAO,KAAa;IACxC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,OAAqB;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAC1D,CAAC;IACF,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAqC;IAErC,IAAI,OAAO,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAAkB,EAClB,IAAY;IAEZ,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,IAAY;IAEZ,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAgB,EAAE;QAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,OAAqB,EACrB,UAA6B;IAE7B,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ObjectShape } from "./mcpInputShape.js";
2
+ export declare function mergeDiscriminatedUnion(shapes: ObjectShape[]): ObjectShape;
3
+ //# sourceMappingURL=mcpInputUnion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpInputUnion.d.ts","sourceRoot":"","sources":["../../src/v1/mcpInputUnion.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAKjB,MAAM,oBAAoB,CAAC;AA+E5B,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAyC1E"}
@@ -0,0 +1,83 @@
1
+ import { declarationsOf, oneOrAll, propertyNamesOf, propertyOf, } from "./mcpInputShape.js";
2
+ function pinnedValueOf(shape, name) {
3
+ const pinned = propertyOf(shape, name)?.const;
4
+ return typeof pinned === "string" ? pinned : undefined;
5
+ }
6
+ function branchesPinnedBy(shapes, name) {
7
+ return shapes.flatMap((shape) => {
8
+ const value = pinnedValueOf(shape, name);
9
+ return value === undefined ? [] : [{ shape, value }];
10
+ });
11
+ }
12
+ function findDiscriminator(shapes) {
13
+ return propertyNamesOf(shapes)
14
+ .map((name) => ({ branches: branchesPinnedBy(shapes, name), name }))
15
+ .find(({ branches }) => branches.length === shapes.length &&
16
+ new Set(branches.map((branch) => branch.value)).size === shapes.length);
17
+ }
18
+ function listAlternatives(values) {
19
+ const quoted = values.map((value) => JSON.stringify(value));
20
+ if (quoted.length < 2)
21
+ return quoted.join("");
22
+ return `${quoted.slice(0, -1).join(", ")} or ${quoted.slice(-1).join("")}`;
23
+ }
24
+ function describeCondition(options) {
25
+ const { branchCount, discriminator, presentIn, requiredIn } = options;
26
+ const onlySome = presentIn.length < branchCount;
27
+ const requiredInSome = requiredIn.length > 0 && requiredIn.length < branchCount;
28
+ const when = (values) => `${discriminator} is ${listAlternatives(values)}`;
29
+ if (onlySome && requiredIn.length === presentIn.length)
30
+ return `Applies only when ${when(presentIn)}, and is required then.`;
31
+ const sentences = [
32
+ ...(onlySome ? [`Applies only when ${when(presentIn)}.`] : []),
33
+ ...(requiredInSome ? [`Required when ${when(requiredIn)}.`] : []),
34
+ ];
35
+ return sentences.length === 0 ? undefined : sentences.join(" ");
36
+ }
37
+ function withCondition(schema, condition) {
38
+ if (condition === undefined)
39
+ return schema;
40
+ const description = typeof schema.description === "string"
41
+ ? `${schema.description} ${condition}`
42
+ : condition;
43
+ return { ...schema, description };
44
+ }
45
+ function withoutPin(schema) {
46
+ return Object.fromEntries(Object.entries(schema).filter(([key]) => key !== "const"));
47
+ }
48
+ // The Claude API refuses a combinator at the root of a tool's input schema,
49
+ // and clients that flatten it themselves either drop branches or leave array
50
+ // fields untyped. A discriminated union keeps every branch: the discriminator
51
+ // becomes an enum, and a field that belongs to some branches says which.
52
+ export function mergeDiscriminatedUnion(shapes) {
53
+ const found = findDiscriminator(shapes);
54
+ if (found === undefined) {
55
+ throw Error("An MCP tool input that is a union needs a discriminator: a property every branch pins to a distinct string.");
56
+ }
57
+ const { branches, name: discriminator } = found;
58
+ const valuesWhere = (matches) => branches.filter(({ shape }) => matches(shape)).map(({ value }) => value);
59
+ const properties = propertyNamesOf(shapes).map((name) => {
60
+ const declared = declarationsOf(shapes, name);
61
+ if (name === discriminator) {
62
+ return [
63
+ name,
64
+ {
65
+ ...oneOrAll(declared.map(withoutPin), "anyOf"),
66
+ enum: branches.map(({ value }) => value),
67
+ },
68
+ ];
69
+ }
70
+ const condition = describeCondition({
71
+ branchCount: shapes.length,
72
+ discriminator,
73
+ presentIn: valuesWhere((shape) => propertyOf(shape, name) !== undefined),
74
+ requiredIn: valuesWhere((shape) => shape.required.includes(name)),
75
+ });
76
+ return [name, withCondition(oneOrAll(declared, "anyOf"), condition)];
77
+ });
78
+ return {
79
+ properties: Object.fromEntries(properties),
80
+ required: propertyNamesOf(shapes).filter((name) => shapes.every((shape) => shape.required.includes(name))),
81
+ };
82
+ }
83
+ //# sourceMappingURL=mcpInputUnion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpInputUnion.js","sourceRoot":"","sources":["../../src/v1/mcpInputUnion.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcpToolDescription.d.ts","sourceRoot":"","sources":["../../src/v1/mcpToolDescription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,KAAK,YAAY,CAAC,IAAI,IAAI,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAA;CAAE,GACtE,IAAI,GACJ,IAAI,SAAS,MAAM,GACjB;KAAG,GAAG,IAAI,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAAE,CAAC,MAAM,IAAI,CAAC,GAC5D,KAAK,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAyBxE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAKR"}
1
+ {"version":3,"file":"mcpToolDescription.d.ts","sourceRoot":"","sources":["../../src/v1/mcpToolDescription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,KAAK,YAAY,CAAC,IAAI,IAAI,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAA;CAAE,GACtE,IAAI,GACJ,IAAI,SAAS,MAAM,GACjB;KAAG,GAAG,IAAI,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAAE,CAAC,MAAM,IAAI,CAAC,GAC5D,KAAK,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA6BxE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAKR"}
@@ -1,8 +1,10 @@
1
1
  const descriptionAddenda = {
2
2
  "environment.update": "At least one of name or runConcurrencyLimit is required.",
3
3
  "flow.list": "An empty flows array is not on its own evidence that QA Wolf lost a flow. Read emptyReason, report what it says, and claim no more than it establishes.",
4
+ "investigation.recordFinding": "Read investigation.get first, and keep one findingId per cause: recording it again replaces the finding instead of adding one.",
4
5
  "issue.update": "At least one of description, name, priority or status is required.",
5
6
  "run.create": "At least one flow or tag is required, so send flowIds, tagNames, or both. Send at most one of aiTaskId and chatSessionId. This call has no idempotency key, so a lost response cannot be safely resubmitted: read run.find before sending it again.",
7
+ "run.get": 'Read a run with flowStatuses: ["failed"] first. A flow that passed on a retry reads passed, so when the flow you want is missing, add "passed" to the filter.',
6
8
  "runner.performAction": "Send withScreenshot: true for the screen the action led to in the same answer, rather than a second round trip through runner_takeScreenshot.",
7
9
  "runner.runFlow": "files must include the entry point and the run's package.json. Send env or environmentId, not both. A path may be sent in files or referenced in unchangedFiles, not both. This call has no idempotency key, so a lost response cannot be safely resubmitted: read the runner's run-status journal stream before sending it again.",
8
10
  "runner.takeScreenshot": "To see the screen an action led to, send withScreenshot: true on runner_performAction instead, which answers with the frame; call this on its own to look at the screen without acting on it.",
@@ -1 +1 @@
1
- {"version":3,"file":"mcpToolDescription.js","sourceRoot":"","sources":["../../src/v1/mcpToolDescription.ts"],"names":[],"mappings":"AAWA,MAAM,kBAAkB,GAAgD;IACtE,oBAAoB,EAClB,0DAA0D;IAC5D,WAAW,EACT,yJAAyJ;IAC3J,cAAc,EACZ,oEAAoE;IACtE,YAAY,EACV,qPAAqP;IACvP,sBAAsB,EACpB,+IAA+I;IACjJ,gBAAgB,EACd,oUAAoU;IACtU,uBAAuB,EACrB,+LAA+L;CAClM,CAAC;AAEF,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAC5C,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY,CAClC,EAAE,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAA8B;IAE9B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,QAAQ;QACb,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,EAAE;QACvC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"mcpToolDescription.js","sourceRoot":"","sources":["../../src/v1/mcpToolDescription.ts"],"names":[],"mappings":"AAWA,MAAM,kBAAkB,GAAgD;IACtE,oBAAoB,EAClB,0DAA0D;IAC5D,WAAW,EACT,yJAAyJ;IAC3J,6BAA6B,EAC3B,gIAAgI;IAClI,cAAc,EACZ,oEAAoE;IACtE,YAAY,EACV,qPAAqP;IACvP,SAAS,EACP,+JAA+J;IACjK,sBAAsB,EACpB,+IAA+I;IACjJ,gBAAgB,EACd,oUAAoU;IACtU,uBAAuB,EACrB,+LAA+L;CAClM,CAAC;AAEF,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAC5C,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY,CAClC,EAAE,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAA8B;IAE9B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,QAAQ;QACb,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,EAAE;QACvC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC3B,CAAC"}
@@ -13,6 +13,13 @@ export declare const makeGetRunContract: <FlowId extends PublicIdSchema, IssueId
13
13
  };
14
14
  readonly description: "Get a run's status, per-flow results, links, and how many of its bugs are blocking.";
15
15
  readonly input: z.ZodObject<{
16
+ flowStatuses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
17
+ failed: "failed";
18
+ running: "running";
19
+ canceled: "canceled";
20
+ queued: "queued";
21
+ passed: "passed";
22
+ }>>>;
16
23
  runId: RunId;
17
24
  }, z.core.$strip>;
18
25
  readonly kind: "read";
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/v1/run/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,eAAO,MAAM,kBAAkB,GAC7B,MAAM,SAAS,cAAc,EAC7B,OAAO,SAAS,cAAc,EAC9B,KAAK,SAAS,cAAc,EAC5B,KAAK;IACL,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6KA,CAAC"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/v1/run/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,eAAO,MAAM,kBAAkB,GAC7B,MAAM,SAAS,cAAc,EAC7B,OAAO,SAAS,cAAc,EAC9B,KAAK,SAAS,cAAc,EAC5B,KAAK;IACL,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4LA,CAAC"}
@@ -1,8 +1,18 @@
1
1
  import { z } from "zod";
2
2
  import { resource } from "../resource.js";
3
- import { makeRunSummaryFields } from "./summary.js";
3
+ import { makeRunSummaryFields, publicRunStatusValues } from "./summary.js";
4
4
  export const makeGetRunContract = (ids) => {
5
+ const flowStatus = z.enum(publicRunStatusValues);
5
6
  const input = z.object({
7
+ flowStatuses: z
8
+ .array(flowStatus)
9
+ .min(1)
10
+ .optional()
11
+ .describe("Return only the flows whose status is one of these. A suite run can " +
12
+ "hold hundreds of flows, so start an investigation with failed " +
13
+ "alone. A flow that passed after a retry reads passed, so add " +
14
+ "passed when a flaky flow is missing from the answer. Omit to " +
15
+ "return every flow. The run-level fields are unaffected."),
6
16
  runId: ids.run,
7
17
  });
8
18
  // Artifact URLs are signed without checking storage, so a fetch can return
@@ -121,11 +131,12 @@ export const makeGetRunContract = (ids) => {
121
131
  attempts,
122
132
  flowId: ids.flow,
123
133
  name: z.string(),
124
- status: z.enum(["queued", "running", "passed", "canceled"]),
134
+ status: flowStatus.exclude(["failed"]),
125
135
  });
126
136
  const flows = z
127
137
  .array(z.discriminatedUnion("status", [failedFlow, nonFailedFlow]))
128
- .describe("The run's flows, ordered alphabetically by name.");
138
+ .describe("The run's flows, ordered alphabetically by name. Only the flows " +
139
+ "matching flowStatuses when the request set it.");
129
140
  const output = resource({
130
141
  ...makeRunSummaryFields(ids),
131
142
  blockingBugCount: z
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/v1/run/get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/v1/run/get.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import type { PublicIdSchema } from "../ids.js";
3
+ /** The public status vocabulary, shared by a run and by each of its flows. */
4
+ export declare const publicRunStatusValues: readonly ["queued", "running", "passed", "failed", "canceled"];
3
5
  export declare const makeRunSummaryFields: <RunId extends PublicIdSchema>(ids: {
4
6
  run: RunId;
5
7
  }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/v1/run/summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,cAAc,EAAE,KAAK;IACtE,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;CAkCC,CAAC"}
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/v1/run/summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,gEAMxB,CAAC;AAKX,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,cAAc,EAAE,KAAK;IACtE,GAAG,EAAE,KAAK,CAAC;CACZ;;;;;;;;;;;;;;;;;CAkCC,CAAC"}
@@ -1,4 +1,12 @@
1
1
  import { z } from "zod";
2
+ /** The public status vocabulary, shared by a run and by each of its flows. */
3
+ export const publicRunStatusValues = [
4
+ "queued",
5
+ "running",
6
+ "passed",
7
+ "failed",
8
+ "canceled",
9
+ ];
2
10
  // The shared run summary fields. run.find returns them as rows. run.get adds
3
11
  // the per-flow results to them. Both shapes come from this one factory, so
4
12
  // the shapes cannot become different.
@@ -28,7 +36,7 @@ export const makeRunSummaryFields = (ids) => ({
28
36
  // for belongs on run.get alone.
29
37
  runId: ids.run,
30
38
  status: z
31
- .enum(["queued", "running", "passed", "failed", "canceled"])
39
+ .enum(publicRunStatusValues)
32
40
  .describe("Whole-run status, and the value to gate a pipeline on. Terminal statuses are passed, failed, and canceled; poll until one is reached. `failed` means the run found a bug that is still open and serious enough to block — a lower-priority bug, or one since resolved, reads `passed`, and the per-flow diagnoses are still in `flows`. The run stays `running` while any investigation is unresolved, including one that carried over to a later run, so a terminal status always means a settled answer."),
33
41
  });
34
42
  //# sourceMappingURL=summary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/v1/run/summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,6EAA6E;AAC7E,2EAA2E;AAC3E,sCAAsC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAA+B,GAElE,EAAE,EAAE,CAAC,CAAC;IACL,WAAW,EAAE,CAAC,CAAC,GAAG;SACf,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,+KAA+K,CAChL;IACH,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,wEAAwE;QACxE,uEAAuE;QACvE,sEAAsE;QACtE,mDAAmD;QACnD,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;KACpD,CAAC;SACD,QAAQ,CACP,wLAAwL,CACzL;IACH,8EAA8E;IAC9E,8EAA8E;IAC9E,gCAAgC;IAChC,KAAK,EAAE,GAAG,CAAC,GAAG;IACd,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;SAC3D,QAAQ,CACP,4eAA4e,CAC7e;CACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/v1/run/summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,8EAA8E;AAC9E,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,6EAA6E;AAC7E,2EAA2E;AAC3E,sCAAsC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAA+B,GAElE,EAAE,EAAE,CAAC,CAAC;IACL,WAAW,EAAE,CAAC,CAAC,GAAG;SACf,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,+KAA+K,CAChL;IACH,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,wEAAwE;QACxE,uEAAuE;QACvE,sEAAsE;QACtE,mDAAmD;QACnD,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;KACpD,CAAC;SACD,QAAQ,CACP,wLAAwL,CACzL;IACH,8EAA8E;IAC9E,8EAA8E;IAC9E,gCAAgC;IAChC,KAAK,EAAE,GAAG,CAAC,GAAG;IACd,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,qBAAqB,CAAC;SAC3B,QAAQ,CACP,4eAA4e,CAC7e;CACJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qawolf/api-contracts",
3
- "version": "0.67.0",
3
+ "version": "0.69.0",
4
4
  "private": false,
5
5
  "description": "Versioned contracts for the QA Wolf public API",
6
6
  "repository": {