@qawolf/api-contracts 0.26.0 → 0.27.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 (67) hide show
  1. package/dist/v1/index.d.ts +292 -124
  2. package/dist/v1/index.d.ts.map +1 -1
  3. package/dist/v1/index.js +10 -2
  4. package/dist/v1/index.js.map +1 -1
  5. package/dist/v1/runner/environment.d.ts.map +1 -1
  6. package/dist/v1/runner/environment.js +11 -8
  7. package/dist/v1/runner/environment.js.map +1 -1
  8. package/dist/v1/runner/evaluateSnippet.d.ts +5 -2
  9. package/dist/v1/runner/evaluateSnippet.d.ts.map +1 -1
  10. package/dist/v1/runner/evaluateSnippet.js +4 -3
  11. package/dist/v1/runner/evaluateSnippet.js.map +1 -1
  12. package/dist/v1/runner/identity.d.ts +8 -8
  13. package/dist/v1/runner/identity.js +5 -5
  14. package/dist/v1/runner/identity.js.map +1 -1
  15. package/dist/v1/runner/importPackage.d.ts +23 -0
  16. package/dist/v1/runner/importPackage.d.ts.map +1 -0
  17. package/dist/v1/runner/importPackage.js +33 -0
  18. package/dist/v1/runner/importPackage.js.map +1 -0
  19. package/dist/v1/runner/index.d.ts +16 -20
  20. package/dist/v1/runner/index.d.ts.map +1 -1
  21. package/dist/v1/runner/index.js +14 -12
  22. package/dist/v1/runner/index.js.map +1 -1
  23. package/dist/v1/runner/inspect.d.ts +42 -0
  24. package/dist/v1/runner/inspect.d.ts.map +1 -0
  25. package/dist/v1/runner/inspect.js +61 -0
  26. package/dist/v1/runner/inspect.js.map +1 -0
  27. package/dist/v1/runner/outcome.d.ts +6 -0
  28. package/dist/v1/runner/outcome.d.ts.map +1 -0
  29. package/dist/v1/runner/outcome.js +8 -0
  30. package/dist/v1/runner/outcome.js.map +1 -0
  31. package/dist/v1/runner/payloadSize.d.ts +6 -0
  32. package/dist/v1/runner/payloadSize.d.ts.map +1 -1
  33. package/dist/v1/runner/payloadSize.js +8 -2
  34. package/dist/v1/runner/payloadSize.js.map +1 -1
  35. package/dist/v1/runner/performAction.d.ts +13 -12
  36. package/dist/v1/runner/performAction.d.ts.map +1 -1
  37. package/dist/v1/runner/performAction.js +17 -10
  38. package/dist/v1/runner/performAction.js.map +1 -1
  39. package/dist/v1/runner/readJournal.d.ts +5 -2
  40. package/dist/v1/runner/readJournal.d.ts.map +1 -1
  41. package/dist/v1/runner/readJournal.js +4 -3
  42. package/dist/v1/runner/readJournal.js.map +1 -1
  43. package/dist/v1/runner/runFlow.d.ts +28 -15
  44. package/dist/v1/runner/runFlow.d.ts.map +1 -1
  45. package/dist/v1/runner/runFlow.js +56 -10
  46. package/dist/v1/runner/runFlow.js.map +1 -1
  47. package/dist/v1/runner/runSelection.d.ts +8 -0
  48. package/dist/v1/runner/runSelection.d.ts.map +1 -0
  49. package/dist/v1/runner/runSelection.js +19 -0
  50. package/dist/v1/runner/runSelection.js.map +1 -0
  51. package/dist/v1/runner/screen.d.ts +2 -11
  52. package/dist/v1/runner/screen.d.ts.map +1 -1
  53. package/dist/v1/runner/screen.js +7 -12
  54. package/dist/v1/runner/screen.js.map +1 -1
  55. package/dist/v1/runner/stopRun.d.ts +19 -0
  56. package/dist/v1/runner/stopRun.d.ts.map +1 -0
  57. package/dist/v1/runner/stopRun.js +26 -0
  58. package/dist/v1/runner/stopRun.js.map +1 -0
  59. package/dist/v1/runner/takeScreenshot.d.ts +9 -9
  60. package/dist/v1/runner/takeScreenshot.d.ts.map +1 -1
  61. package/dist/v1/runner/takeScreenshot.js +8 -7
  62. package/dist/v1/runner/takeScreenshot.js.map +1 -1
  63. package/dist/v1/runner/unreachable.d.ts +4 -7
  64. package/dist/v1/runner/unreachable.d.ts.map +1 -1
  65. package/dist/v1/runner/unreachable.js +4 -7
  66. package/dist/v1/runner/unreachable.js.map +1 -1
  67. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDF,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDF,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}
package/dist/v1/index.js CHANGED
@@ -12,11 +12,13 @@ export { runEnvironmentSchema } from "./runner/environment.js";
12
12
  // server and the runner validate with, so they are shared rather than restated.
13
13
  export { isShippableRunFilePath, runFilePathSchema, runPackageJsonPath, shippableRunFileExtensions, } from "./runner/files.js";
14
14
  export { makeRunnerSchema, runnerIdSchema, runnerNameSchema, } from "./runner/identity.js";
15
+ export { inspectRequestSchema, } from "./runner/inspect.js";
15
16
  // A journal read is answered verbatim by the public API, so its wire shapes are
16
17
  // published here and the private journal package imports them from here.
17
18
  export { journalEntrySchema, journalStreamSchema, knownJournalStreams, maxJournalStreamNameLength, readJournalRequestSchema, readJournalResponseSchema, } from "./runner/journal.js";
18
19
  export { maxRunFilesByteLength, maxRunnerRequestEncodedByteLength, runFilesByteLength, runFilesSchema, } from "./runner/payloadSize.js";
19
20
  export { maxActionErrorMessageLength } from "./runner/performAction.js";
21
+ export { runSelectionSchema, } from "./runner/runSelection.js";
20
22
  import { makeAutomateContract } from "./automate/index.js";
21
23
  import { makeDeleteEnvironmentVariableContract } from "./environment/deleteVariable.js";
22
24
  import { makeFindEnvironmentsContract } from "./environment/find.js";
@@ -35,10 +37,13 @@ import { makeFindRunsContract } from "./run/find.js";
35
37
  import { makeGetRunContract } from "./run/get.js";
36
38
  import { makeCreateRunContract } from "./run/index.js";
37
39
  import { makeEvaluateSnippetOnRunnerContract } from "./runner/evaluateSnippet.js";
38
- import { makeLaunchRunnerContract, makeStopRunnerContract, } from "./runner/index.js";
40
+ import { makeImportPackageOnRunnerContract } from "./runner/importPackage.js";
41
+ import { makeLaunchRunnerContract, makeTerminateRunnerContract, } from "./runner/index.js";
42
+ import { makeInspectOnRunnerContract } from "./runner/inspect.js";
39
43
  import { makePerformActionOnRunnerContract } from "./runner/performAction.js";
40
44
  import { makeReadRunnerJournalContract } from "./runner/readJournal.js";
41
45
  import { makeRunFlowOnRunnerContract } from "./runner/runFlow.js";
46
+ import { makeStopRunOnRunnerContract } from "./runner/stopRun.js";
42
47
  import { makeTakeScreenshotOnRunnerContract } from "./runner/takeScreenshot.js";
43
48
  import { makeCreateTagContract } from "./tag/index.js";
44
49
  import { makeListTagsContract } from "./tag/list.js";
@@ -84,12 +89,15 @@ export const makeContractsV1 = (ids) => {
84
89
  },
85
90
  runner: {
86
91
  evaluateSnippet: makeEvaluateSnippetOnRunnerContract(),
92
+ importPackage: makeImportPackageOnRunnerContract(),
93
+ inspect: makeInspectOnRunnerContract(),
87
94
  launch: makeLaunchRunnerContract(),
88
95
  performAction: makePerformActionOnRunnerContract(),
89
96
  readJournal: makeReadRunnerJournalContract(),
90
97
  runFlow: makeRunFlowOnRunnerContract(),
91
- stop: makeStopRunnerContract(),
98
+ stopRun: makeStopRunOnRunnerContract(),
92
99
  takeScreenshot: makeTakeScreenshotOnRunnerContract(),
100
+ terminate: makeTerminateRunnerContract(),
93
101
  },
94
102
  tag: {
95
103
  create: makeCreateTagContract(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkCxB,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,uCAmB9B,CAAC"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqCxB,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,uCAmB9B,CAAC"}
@@ -3,15 +3,18 @@ import { z } from "zod";
3
3
  * The environment variables a caller may give a run, and the names they may not.
4
4
  */
5
5
  /**
6
- * The prefix QA Wolf reserves for the variables it sets on a run itself. A
7
- * caller-supplied value under it is refused, and would be overridden anyway.
6
+ * The one name a caller may not set. It namespaces the runner's shared
7
+ * `node_modules` cache, is read before any customer code runs, and the caching
8
+ * agent's first-configure-wins lock means whoever sets it first decides for the
9
+ * pod's life. A caller who could set it would restore from, and then overwrite,
10
+ * another team's cached dependencies. The server stamps it from the key the
11
+ * request authenticated with.
8
12
  */
9
- const reservedRunEnvironmentVariablePrefix = "QAWOLF_";
13
+ const reservedRunEnvironmentVariableName = "QAWOLF_TEAM_ID";
10
14
  /**
11
15
  * A name becomes a name in the run's process environment, so it is held to what
12
- * a shell accepts — and may not be one of QA Wolf's own. A refusal rather than
13
- * a key schema, whose message would reach the caller as a bare "invalid key in
14
- * record".
16
+ * a shell accepts. A refusal rather than a key schema, whose message would reach
17
+ * the caller as a bare "invalid key in record".
15
18
  */
16
19
  function refusalForRunEnvironmentVariableName(name) {
17
20
  if (name.length < 1 || name.length > 256)
@@ -19,8 +22,8 @@ function refusalForRunEnvironmentVariableName(name) {
19
22
  if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
20
23
  return "An environment variable name may contain only letters, digits and underscores, and must not start with a digit.";
21
24
  // Case-insensitively, so the reservation cannot be worked around by case.
22
- if (name.toUpperCase().startsWith(reservedRunEnvironmentVariablePrefix))
23
- return `Environment variable names beginning with ${reservedRunEnvironmentVariablePrefix} are reserved by QA Wolf and set for you.`;
25
+ if (name.toUpperCase() === reservedRunEnvironmentVariableName)
26
+ return `${reservedRunEnvironmentVariableName} is reserved by QA Wolf and set for you.`;
24
27
  return undefined;
25
28
  }
26
29
  const maxRunEnvironmentVariables = 100;
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/v1/runner/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AAEH;;;GAGG;AACH,MAAM,oCAAoC,GAAG,SAAS,CAAC;AAEvD;;;;;GAKG;AACH,SAAS,oCAAoC,CAC3C,IAAY;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QACtC,OAAO,oEAAoE,CAAC;IAC9E,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,OAAO,iHAAiH,CAAC;IAC3H,0EAA0E;IAC1E,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,oCAAoC,CAAC;QACrE,OAAO,6CAA6C,oCAAoC,2CAA2C,CAAC;IACtI,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,4BAA4B,GAAG,CAAC,GAAG,IAAI,CAAC;AAE9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;KAChE,WAAW,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,iBAAiB,CAAC,QAAQ,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;KACD,MAAM,CACL,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,0BAA0B,EAC/D;IACE,KAAK,EAAE,WAAW,0BAA0B,yCAAyC;CACtF,CACF,CAAC"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/v1/runner/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AAEH;;;;;;;GAOG;AACH,MAAM,kCAAkC,GAAG,gBAAgB,CAAC;AAE5D;;;;GAIG;AACH,SAAS,oCAAoC,CAC3C,IAAY;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QACtC,OAAO,oEAAoE,CAAC;IAC9E,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,OAAO,iHAAiH,CAAC;IAC3H,0EAA0E;IAC1E,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,kCAAkC;QAC3D,OAAO,GAAG,kCAAkC,0CAA0C,CAAC;IACzF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,4BAA4B,GAAG,CAAC,GAAG,IAAI,CAAC;AAE9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;KAChE,WAAW,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,iBAAiB,CAAC,QAAQ,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;KACD,MAAM,CACL,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,0BAA0B,EAC/D;IACE,KAAK,EAAE,WAAW,0BAA0B,yCAAyC;CACtF,CACF,CAAC"}
@@ -11,14 +11,17 @@ export declare const makeEvaluateSnippetOnRunnerContract: () => {
11
11
  readonly name: "runner.evaluateSnippet";
12
12
  readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
13
13
  errorMessage: z.ZodOptional<z.ZodString>;
14
- outcome: z.ZodLiteral<"evaluated">;
14
+ outcome: z.ZodLiteral<"success">;
15
15
  result: z.ZodEnum<{
16
16
  success: "success";
17
17
  error: "error";
18
18
  stopped: "stopped";
19
19
  }>;
20
20
  }, z.core.$strip>, z.ZodObject<{
21
- outcome: z.ZodLiteral<"runner-unreachable">;
21
+ failureReason: z.ZodEnum<{
22
+ "runner-unreachable": "runner-unreachable";
23
+ }>;
24
+ outcome: z.ZodLiteral<"failure">;
22
25
  }, z.core.$strip>], "outcome">;
23
26
  };
24
27
  //# sourceMappingURL=evaluateSnippet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateSnippet.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/evaluateSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;CA+D/C,CAAC"}
1
+ {"version":3,"file":"evaluateSnippet.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/evaluateSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;CA+D/C,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { runFilePathSchema } from "./files.js";
3
3
  import { runnerIdSchema } from "./identity.js";
4
+ import { makeRunnerFailureSchema } from "./outcome.js";
4
5
  import { runFilesSchema } from "./payloadSize.js";
5
- import { runnerUnreachableSchema } from "./unreachable.js";
6
+ import { runnerUnreachableFailureReason } from "./unreachable.js";
6
7
  /**
7
8
  * A snippet is one expression or a handful of statements, not a program: it is
8
9
  * bounded so a caller cannot smuggle a whole project through as code instead of
@@ -36,12 +37,12 @@ export const makeEvaluateSnippetOnRunnerContract = () => {
36
37
  .string()
37
38
  .optional()
38
39
  .describe("Present when `result` is `error`."),
39
- outcome: z.literal("evaluated"),
40
+ outcome: z.literal("success"),
40
41
  result: z
41
42
  .enum(["success", "stopped", "error"])
42
43
  .describe("`success` if the snippet ran to completion, `stopped` if it was interrupted, `error` if it threw. Whether it ran, not what it evaluated to."),
43
44
  }),
44
- runnerUnreachableSchema,
45
+ makeRunnerFailureSchema([runnerUnreachableFailureReason]),
45
46
  ]);
46
47
  return {
47
48
  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-unreachable` if the runner could not be reached or could not evaluate: as well as a runner that is still starting, has terminated after inactivity, or is busy, this covers a runner with no live page to evaluate against — which will never clear, so check that the runner you launched is one that runs a browser before retrying. It is NOT 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.",
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateSnippet.js","sourceRoot":"","sources":["../../../src/v1/runner/evaluateSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,EAAE;IACtD,MAAM,KAAK,GAAG,CAAC;SACZ,MAAM,CAAC;QACN,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,oBAAoB,CAAC;aACzB,QAAQ,CACP,oGAAoG,CACrG;QACH,QAAQ,EAAE,iBAAiB;aACxB,QAAQ,EAAE;aACV,QAAQ,CACP,sHAAsH,CACvH;QACH,KAAK,EAAE,cAAc;aAClB,QAAQ,EAAE;aACV,QAAQ,CACP,6IAA6I,CAC9I;QACH,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,8CAA8C,CAC/C;KACF,CAAC;SACD,MAAM,CACL,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,QAAQ,KAAK,SAAS;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EACtD;QACE,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB,CACF,CAAC;IAEJ,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mCAAmC,CAAC;YAChD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/B,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;iBACrC,QAAQ,CACP,6IAA6I,CAC9I;SACJ,CAAC;QACF,uBAAuB;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,i4BAAi4B;QACn4B,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,wBAAwB;QAC9B,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"evaluateSnippet.js","sourceRoot":"","sources":["../../../src/v1/runner/evaluateSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,EAAE;IACtD,MAAM,KAAK,GAAG,CAAC;SACZ,MAAM,CAAC;QACN,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,oBAAoB,CAAC;aACzB,QAAQ,CACP,oGAAoG,CACrG;QACH,QAAQ,EAAE,iBAAiB;aACxB,QAAQ,EAAE;aACV,QAAQ,CACP,sHAAsH,CACvH;QACH,KAAK,EAAE,cAAc;aAClB,QAAQ,EAAE;aACV,QAAQ,CACP,6IAA6I,CAC9I;QACH,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,8CAA8C,CAC/C;KACF,CAAC;SACD,MAAM,CACL,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,QAAQ,KAAK,SAAS;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EACtD;QACE,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB,CACF,CAAC;IAEJ,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mCAAmC,CAAC;YAChD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7B,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;iBACrC,QAAQ,CACP,6IAA6I,CAC9I;SACJ,CAAC;QACF,uBAAuB,CAAC,CAAC,8BAA8B,CAAC,CAAC;KAC1D,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,i4BAAi4B;QACn4B,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,wBAAwB;QAC9B,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const runnerNameSchema: z.ZodEnum<{
3
- node20Basic: "node20Basic";
4
- node20WithAndroid: "node20WithAndroid";
5
- node20WithIos: "node20WithIos";
6
- node20WithPlaywright: "node20WithPlaywright";
3
+ basic: "basic";
4
+ playwright: "playwright";
5
+ android: "android";
6
+ ios: "ios";
7
7
  }>;
8
8
  export type RunnerNameForPublicApi = z.infer<typeof runnerNameSchema>;
9
9
  export declare const runnerIdSchema: z.ZodString;
@@ -12,10 +12,10 @@ export declare const makeRunnerSchema: () => z.ZodObject<{
12
12
  gpuAccelerated: z.ZodBoolean;
13
13
  id: z.ZodString;
14
14
  runnerName: z.ZodEnum<{
15
- node20Basic: "node20Basic";
16
- node20WithAndroid: "node20WithAndroid";
17
- node20WithIos: "node20WithIos";
18
- node20WithPlaywright: "node20WithPlaywright";
15
+ basic: "basic";
16
+ playwright: "playwright";
17
+ android: "android";
18
+ ios: "ios";
19
19
  }>;
20
20
  }, z.core.$strip>;
21
21
  //# sourceMappingURL=identity.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export const runnerNameSchema = z.enum([
3
- "node20Basic",
4
- "node20WithAndroid",
5
- "node20WithIos",
6
- "node20WithPlaywright",
3
+ "basic",
4
+ "playwright",
5
+ "android",
6
+ "ios",
7
7
  ]);
8
8
  export const runnerIdSchema = z
9
9
  .string()
@@ -16,6 +16,6 @@ export const makeRunnerSchema = () => z.object({
16
16
  .boolean()
17
17
  .describe("Whether the runner was placed on GPU hardware. Chosen by QA Wolf from the team's configuration and what the fleet can provide, not requested."),
18
18
  id: runnerIdSchema.describe("The runner's id, as supplied when launching it."),
19
- runnerName: runnerNameSchema.describe("The image requested when the runner was launched. QA Wolf may place it on faster hardware, reported in gpuAccelerated."),
19
+ runnerName: runnerNameSchema.describe("The runner family requested when the runner was launched. QA Wolf may place it on faster hardware, reported in gpuAccelerated."),
20
20
  });
21
21
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/v1/runner/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,aAAa;IACb,mBAAmB;IACnB,eAAe;IACf,sBAAsB;CACvB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CACJ,iCAAiC,EACjC,mHAAmH,CACpH,CAAC;AAEJ,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,CAAC,CAAC,MAAM,CAAC;IACP,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,CACP,+IAA+I,CAChJ;IACH,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,iDAAiD,CAClD;IACD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CACnC,wHAAwH,CACzH;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/v1/runner/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,OAAO;IACP,YAAY;IACZ,SAAS;IACT,KAAK;CACN,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CACJ,iCAAiC,EACjC,mHAAmH,CACpH,CAAC;AAEJ,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,CAAC,CAAC,MAAM,CAAC;IACP,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,CACP,+IAA+I,CAChJ;IACH,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,iDAAiD,CAClD;IACD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CACnC,gIAAgI,CACjI;CACF,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ export declare const makeImportPackageOnRunnerContract: () => {
3
+ 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.";
4
+ readonly input: z.ZodObject<{
5
+ id: z.ZodString;
6
+ npmDependencies: z.ZodRecord<z.ZodString, z.ZodString>;
7
+ packageName: z.ZodString;
8
+ packageVersion: z.ZodString;
9
+ }, z.core.$strip>;
10
+ readonly kind: "write";
11
+ readonly name: "runner.importPackage";
12
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
13
+ outcome: z.ZodLiteral<"success">;
14
+ }, z.core.$strip>, z.ZodObject<{
15
+ errorMessage: z.ZodOptional<z.ZodString>;
16
+ failureReason: z.ZodEnum<{
17
+ "runner-unreachable": "runner-unreachable";
18
+ "install-failed": "install-failed";
19
+ }>;
20
+ outcome: z.ZodLiteral<"failure">;
21
+ }, z.core.$strip>], "outcome">;
22
+ };
23
+ //# sourceMappingURL=importPackage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importPackage.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/importPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;CAqC7C,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { runnerIdSchema } from "./identity.js";
3
+ const maxPackageNameLength = 214;
4
+ const maxPackageVersionLength = 256;
5
+ export const makeImportPackageOnRunnerContract = () => {
6
+ const input = z.object({
7
+ id: runnerIdSchema.describe("Id of the runner to install into."),
8
+ npmDependencies: z
9
+ .record(z.string(), z.string())
10
+ .describe("The run's current npm dependencies, so the install resolves against them."),
11
+ packageName: z.string().min(1).max(maxPackageNameLength),
12
+ packageVersion: z.string().min(1).max(maxPackageVersionLength),
13
+ });
14
+ const output = z.discriminatedUnion("outcome", [
15
+ z.object({ outcome: z.literal("success") }),
16
+ z.object({
17
+ errorMessage: z
18
+ .string()
19
+ .optional()
20
+ .describe("What npm said, when the failure came from the install."),
21
+ failureReason: z.enum(["install-failed", "runner-unreachable"]),
22
+ outcome: z.literal("failure"),
23
+ }),
24
+ ]);
25
+ return {
26
+ 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.",
27
+ input,
28
+ kind: "write",
29
+ name: "runner.importPackage",
30
+ output,
31
+ };
32
+ };
33
+ //# sourceMappingURL=importPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importPackage.js","sourceRoot":"","sources":["../../../src/v1/runner/importPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,EAAE;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAChE,eAAe,EAAE,CAAC;aACf,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC9B,QAAQ,CACP,2EAA2E,CAC5E;QACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACxD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC;KAC/D,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,wDAAwD,CAAC;YACrE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;YAC/D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,0eAA0e;QAC5e,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,sBAAsB;QAC5B,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import { z } from "zod";
2
2
  export declare const makeLaunchRunnerContract: () => {
3
- 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 `outcome` to tell which happened.";
3
+ 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.";
4
4
  readonly input: z.ZodObject<{
5
5
  id: z.ZodString;
6
6
  runnerName: z.ZodOptional<z.ZodEnum<{
7
- node20Basic: "node20Basic";
8
- node20WithAndroid: "node20WithAndroid";
9
- node20WithIos: "node20WithIos";
10
- node20WithPlaywright: "node20WithPlaywright";
7
+ basic: "basic";
8
+ playwright: "playwright";
9
+ android: "android";
10
+ ios: "ios";
11
11
  }>>;
12
12
  }, z.core.$strip>;
13
13
  readonly kind: "write";
@@ -16,30 +16,26 @@ export declare const makeLaunchRunnerContract: () => {
16
16
  gpuAccelerated: z.ZodBoolean;
17
17
  id: z.ZodString;
18
18
  runnerName: z.ZodEnum<{
19
- node20Basic: "node20Basic";
20
- node20WithAndroid: "node20WithAndroid";
21
- node20WithIos: "node20WithIos";
22
- node20WithPlaywright: "node20WithPlaywright";
23
- }>;
24
- outcome: z.ZodEnum<{
25
- launched: "launched";
26
- "already-running": "already-running";
19
+ basic: "basic";
20
+ playwright: "playwright";
21
+ android: "android";
22
+ ios: "ios";
27
23
  }>;
24
+ alreadyRunning: z.ZodBoolean;
25
+ outcome: z.ZodLiteral<"success">;
28
26
  }, z.core.$strip>;
29
27
  };
30
- export declare const makeStopRunnerContract: () => {
31
- readonly description: "Stop an interactive runner on the caller's team. Stopping a runner that is not running succeeds and reports `not-running`, so a retry needs no special handling.";
28
+ export declare const makeTerminateRunnerContract: () => {
29
+ 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.";
32
30
  readonly input: z.ZodObject<{
33
31
  id: z.ZodString;
34
32
  }, z.core.$strip>;
35
33
  readonly kind: "write";
36
- readonly name: "runner.stop";
34
+ readonly name: "runner.terminate";
37
35
  readonly output: z.ZodObject<{
38
36
  id: z.ZodString;
39
- outcome: z.ZodEnum<{
40
- stopped: "stopped";
41
- "not-running": "not-running";
42
- }>;
37
+ outcome: z.ZodLiteral<"success">;
38
+ wasRunning: z.ZodBoolean;
43
39
  }, z.core.$strip>;
44
40
  };
45
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCpC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;CA0BlC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;CAiCpC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;CA2BvC,CAAC"}
@@ -5,36 +5,38 @@ export const makeLaunchRunnerContract = () => {
5
5
  id: runnerIdSchema.describe("Id to launch the runner under, chosen by the caller. Launching the same id again returns the runner already running under it."),
6
6
  runnerName: runnerNameSchema
7
7
  .optional()
8
- .describe("Image to run. Defaults to the standard web image, node20WithPlaywright."),
8
+ .describe("The runner family to launch. Defaults to the standard web family, playwright."),
9
9
  });
10
10
  const output = makeRunnerSchema().extend({
11
- outcome: z
12
- .enum(["launched", "already-running"])
13
- .describe("`launched` if this call started the runner. `already-running` if a runner was already running under this id and was returned unchanged — no second runner was started."),
11
+ alreadyRunning: z
12
+ .boolean()
13
+ .describe("True when a runner was already running under this id and was returned unchanged, so no second runner was started and nothing new is billed. Not an error either way."),
14
+ outcome: z.literal("success"),
14
15
  });
15
16
  return {
16
- 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 `outcome` to tell which happened.",
17
+ 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.",
17
18
  input,
18
19
  kind: "write",
19
20
  name: "runner.launch",
20
21
  output,
21
22
  };
22
23
  };
23
- export const makeStopRunnerContract = () => {
24
+ export const makeTerminateRunnerContract = () => {
24
25
  const input = z.object({
25
- id: runnerIdSchema.describe("Id of the runner to stop."),
26
+ id: runnerIdSchema.describe("Id of the runner to terminate."),
26
27
  });
27
28
  const output = z.object({
28
29
  id: runnerIdSchema.describe("Id of the runner the call addressed."),
29
- outcome: z
30
- .enum(["stopped", "not-running"])
31
- .describe("`stopped` if the runner was running and has been stopped. `not-running` if no running runner has this id — it was already stopped, was never launched, or terminated on its own after inactivity; these are not distinguished, because the run system keeps no record of a runner once it is gone."),
30
+ outcome: z.literal("success"),
31
+ wasRunning: z
32
+ .boolean()
33
+ .describe("False when no running runner had this id: it was already terminated, was never launched, or terminated on its own after inactivity. These are not distinguished, because the run system keeps no record of a runner once it is gone. Not an error, and a retry needs no special handling."),
32
34
  });
33
35
  return {
34
- description: "Stop an interactive runner on the caller's team. Stopping a runner that is not running succeeds and reports `not-running`, so a retry needs no special handling.",
36
+ 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.",
35
37
  input,
36
38
  kind: "write",
37
- name: "runner.stop",
39
+ name: "runner.terminate",
38
40
  output,
39
41
  };
40
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,+HAA+H,CAChI;QACD,UAAU,EAAE,gBAAgB;aACzB,QAAQ,EAAE;aACV,QAAQ,CACP,yEAAyE,CAC1E;KACJ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;QACvC,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;aACrC,QAAQ,CACP,wKAAwK,CACzK;KACJ,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,8aAA8a;QAChb,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,eAAe;QACrB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACzD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACnE,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;aAChC,QAAQ,CACP,oSAAoS,CACrS;KACJ,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,kKAAkK;QACpK,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,aAAa;QACnB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CACzB,+HAA+H,CAChI;QACD,UAAU,EAAE,gBAAgB;aACzB,QAAQ,EAAE;aACV,QAAQ,CACP,+EAA+E,CAChF;KACJ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;QACvC,cAAc,EAAE,CAAC;aACd,OAAO,EAAE;aACT,QAAQ,CACP,sKAAsK,CACvK;QACH,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KAC9B,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,qbAAqb;QACvb,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,eAAe;QACrB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACnE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7B,UAAU,EAAE,CAAC;aACV,OAAO,EAAE;aACT,QAAQ,CACP,2RAA2R,CAC5R;KACJ,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,yRAAyR;QAC3R,KAAK;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ export declare const inspectRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ selector: z.ZodString;
4
+ what: z.ZodLiteral<"element-html">;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ selector: z.ZodOptional<z.ZodString>;
7
+ what: z.ZodLiteral<"page-html">;
8
+ }, z.core.$strip>, z.ZodObject<{
9
+ variableName: z.ZodString;
10
+ what: z.ZodLiteral<"variable">;
11
+ }, z.core.$strip>], "what">;
12
+ export type InspectOnRunnerRequest = z.infer<typeof inspectRequestSchema>;
13
+ export declare const makeInspectOnRunnerContract: () => {
14
+ readonly description: string;
15
+ readonly input: z.ZodObject<{
16
+ id: z.ZodString;
17
+ request: z.ZodDiscriminatedUnion<[z.ZodObject<{
18
+ selector: z.ZodString;
19
+ what: z.ZodLiteral<"element-html">;
20
+ }, z.core.$strip>, z.ZodObject<{
21
+ selector: z.ZodOptional<z.ZodString>;
22
+ what: z.ZodLiteral<"page-html">;
23
+ }, z.core.$strip>, z.ZodObject<{
24
+ variableName: z.ZodString;
25
+ what: z.ZodLiteral<"variable">;
26
+ }, z.core.$strip>], "what">;
27
+ }, z.core.$strip>;
28
+ readonly kind: "read";
29
+ readonly name: "runner.inspect";
30
+ readonly output: z.ZodDiscriminatedUnion<[z.ZodObject<{
31
+ outcome: z.ZodLiteral<"success">;
32
+ value: z.ZodString;
33
+ }, z.core.$strip>, z.ZodObject<{
34
+ errorMessage: z.ZodOptional<z.ZodString>;
35
+ failureReason: z.ZodEnum<{
36
+ "runner-unreachable": "runner-unreachable";
37
+ "nothing-to-inspect": "nothing-to-inspect";
38
+ }>;
39
+ outcome: z.ZodLiteral<"failure">;
40
+ }, z.core.$strip>], "outcome">;
41
+ };
42
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,oBAAoB;;;;;;;;;2BA0B/B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ import { runnerIdSchema } from "./identity.js";
3
+ import { retryableRunnerUnreachableDescription } from "./unreachable.js";
4
+ const maxSelectorLength = 2_000;
5
+ const maxVariableNameLength = 256;
6
+ export const inspectRequestSchema = z.discriminatedUnion("what", [
7
+ z.object({
8
+ selector: z
9
+ .string()
10
+ .min(1)
11
+ .max(maxSelectorLength)
12
+ .describe("Playwright selector for the element to inspect."),
13
+ what: z.literal("element-html"),
14
+ }),
15
+ z.object({
16
+ selector: z
17
+ .string()
18
+ .min(1)
19
+ .max(maxSelectorLength)
20
+ .optional()
21
+ .describe("Inspect only this subtree. Omit to inspect the whole page."),
22
+ what: z.literal("page-html"),
23
+ }),
24
+ z.object({
25
+ variableName: z
26
+ .string()
27
+ .min(1)
28
+ .max(maxVariableNameLength)
29
+ .describe("Name of a top-level variable in the running workflow."),
30
+ what: z.literal("variable"),
31
+ }),
32
+ ]);
33
+ export const makeInspectOnRunnerContract = () => {
34
+ const input = z.object({
35
+ id: runnerIdSchema.describe("Id of the runner to inspect."),
36
+ request: inspectRequestSchema,
37
+ });
38
+ const output = z.discriminatedUnion("outcome", [
39
+ z.object({
40
+ outcome: z.literal("success"),
41
+ value: z.string().describe("The HTML, or the variable's value as JSON."),
42
+ }),
43
+ z.object({
44
+ errorMessage: z
45
+ .string()
46
+ .optional()
47
+ .describe("What the runner said, when it said anything."),
48
+ failureReason: z.enum(["nothing-to-inspect", "runner-unreachable"]),
49
+ outcome: z.literal("failure"),
50
+ }),
51
+ ]);
52
+ return {
53
+ description: "Inspect one thing on an interactive runner: an element's HTML, the page's HTML simplified for a model, or a top-level variable's value as JSON. `nothing-to-inspect` means the runner had nothing to answer with: no live page, no element matching the selector, or no variable under that name. A runner cannot tell those apart, so it reports the one reason and puts whatever it did say in `errorMessage`. " +
54
+ retryableRunnerUnreachableDescription,
55
+ input,
56
+ kind: "read",
57
+ name: "runner.inspect",
58
+ output,
59
+ };
60
+ };
61
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/v1/runner/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qCAAqC,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;KAChC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,iBAAiB,CAAC;aACtB,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;KAC7B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,qBAAqB,CAAC;aAC1B,QAAQ,CAAC,uDAAuD,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;KAC5B,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAC7C,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACzE,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EACT,mZAAmZ;YACnZ,qCAAqC;QACvC,KAAK;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB;QACtB,MAAM;KAMP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare function makeRunnerFailureSchema<const Reasons extends readonly [string, ...string[]]>(reasons: Reasons): z.ZodObject<{
3
+ failureReason: z.ZodEnum<{ [k_1 in Reasons[number]]: k_1; } extends infer T ? { [k in keyof T]: T[k]; } : never>;
4
+ outcome: z.ZodLiteral<"failure">;
5
+ }, z.core.$strip>;
6
+ //# sourceMappingURL=outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../../src/v1/runner/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACpD,OAAO,EAAE,OAAO;;;kBAKjB"}
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export function makeRunnerFailureSchema(reasons) {
3
+ return z.object({
4
+ failureReason: z.enum(reasons),
5
+ outcome: z.literal("failure"),
6
+ });
7
+ }
8
+ //# sourceMappingURL=outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../../src/v1/runner/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,uBAAuB,CAErC,OAAgB;IAChB,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC"}