@overkill-dev/run 0.0.75 → 0.0.77

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 (208) hide show
  1. package/assertion-protocol/source-location.js +10 -0
  2. package/assertion-protocol/source-location.js.map +1 -1
  3. package/config/config.d.ts +4 -2
  4. package/config/config.d.ts.map +1 -1
  5. package/config/config.js +21 -0
  6. package/config/config.js.map +1 -1
  7. package/config/property-policy.js +54 -0
  8. package/config/property-policy.js.map +1 -0
  9. package/config/schema.d.ts +132 -0
  10. package/config/schema.d.ts.map +1 -1
  11. package/config/schema.js +17 -1
  12. package/config/schema.js.map +1 -1
  13. package/config/snapshot.js +12 -0
  14. package/config/snapshot.js.map +1 -1
  15. package/config/types.d.ts +12 -1
  16. package/config/types.d.ts.map +1 -1
  17. package/config/validation.js +25 -3
  18. package/config/validation.js.map +1 -1
  19. package/engine/case-body-execution.js +6 -2
  20. package/engine/case-body-execution.js.map +1 -1
  21. package/engine/case-execution-lifecycle.js +22 -0
  22. package/engine/case-execution-lifecycle.js.map +1 -0
  23. package/engine/engine.d.ts +2 -1
  24. package/engine/engine.d.ts.map +1 -1
  25. package/engine/engine.js +1 -0
  26. package/engine/engine.js.map +1 -1
  27. package/engine/execution-supervision-state.js +2 -0
  28. package/engine/execution-supervision-state.js.map +1 -1
  29. package/engine/execution-test-plan-cases.js +24 -1
  30. package/engine/execution-test-plan-cases.js.map +1 -1
  31. package/engine/identity.d.ts +1 -0
  32. package/engine/identity.d.ts.map +1 -1
  33. package/engine/property-node.d.ts +30 -0
  34. package/engine/property-node.d.ts.map +1 -0
  35. package/engine/property-node.js +9 -0
  36. package/engine/property-node.js.map +1 -0
  37. package/engine/test-body.d.ts +16 -0
  38. package/engine/test-body.d.ts.map +1 -0
  39. package/engine/test-body.js +23 -0
  40. package/engine/test-body.js.map +1 -1
  41. package/engine/test-node.d.ts +11 -5
  42. package/engine/test-node.d.ts.map +1 -1
  43. package/engine/test-node.js +23 -31
  44. package/engine/test-node.js.map +1 -1
  45. package/engine/test-plan.js +3 -3
  46. package/engine/test-plan.js.map +1 -1
  47. package/package.json +10 -2
  48. package/packages/run/command-line.entry-point.d.ts +1 -1
  49. package/packages/run/command-line.entry-point.d.ts.map +1 -1
  50. package/packages/run/config.entry-point.d.ts +2 -2
  51. package/packages/run/config.entry-point.d.ts.map +1 -1
  52. package/packages/run/run.entry-point.d.ts +11 -3
  53. package/packages/run/run.entry-point.d.ts.map +1 -1
  54. package/packages/run/run.entry-point.js +3 -0
  55. package/packages/run/run.entry-point.js.map +1 -1
  56. package/readme.md +16 -0
  57. package/run/attachment-coordinator-context.js +6 -0
  58. package/run/attachment-coordinator-context.js.map +1 -1
  59. package/run/attachment-eligibility.js +2 -1
  60. package/run/attachment-eligibility.js.map +1 -1
  61. package/run/benchmark-command-policy.d.ts +1 -1
  62. package/run/benchmark-command-policy.d.ts.map +1 -1
  63. package/run/child-process.entry-point.js +3 -1
  64. package/run/child-process.entry-point.js.map +1 -1
  65. package/run/collected-run-plan-schema.js +13 -0
  66. package/run/collected-run-plan-schema.js.map +1 -1
  67. package/run/collected-run-plan.js +5 -14
  68. package/run/collected-run-plan.js.map +1 -1
  69. package/run/command-line-config.js +1 -1
  70. package/run/command-line-config.js.map +1 -1
  71. package/run/command-line-execution.js.map +1 -1
  72. package/run/{current-process-run-orchestrator.d.ts → current-process-run-input.d.ts} +2 -2
  73. package/run/current-process-run-input.d.ts.map +1 -0
  74. package/run/current-process-run-input.js +42 -0
  75. package/run/current-process-run-input.js.map +1 -0
  76. package/run/current-process-run-orchestrator.js +3 -64
  77. package/run/current-process-run-orchestrator.js.map +1 -1
  78. package/run/default-run-engine.js +1 -0
  79. package/run/default-run-engine.js.map +1 -1
  80. package/run/duration-history-schema.js +1 -1
  81. package/run/duration-history-schema.js.map +1 -1
  82. package/run/duration-history.d.ts.map +1 -1
  83. package/run/duration-history.js +4 -0
  84. package/run/duration-history.js.map +1 -1
  85. package/run/execution-failure-schema.d.ts +4 -0
  86. package/run/execution-failure-schema.d.ts.map +1 -0
  87. package/run/execution-failure-schema.js +24 -0
  88. package/run/execution-failure-schema.js.map +1 -0
  89. package/run/execution-failure.d.ts +4 -0
  90. package/run/execution-failure.d.ts.map +1 -0
  91. package/run/execution-failure.js +66 -0
  92. package/run/execution-failure.js.map +1 -0
  93. package/run/execution-session-child.js +28 -0
  94. package/run/execution-session-child.js.map +1 -0
  95. package/run/execution-session-collected.js +41 -0
  96. package/run/execution-session-collected.js.map +1 -0
  97. package/run/execution-session-context.js +9 -0
  98. package/run/execution-session-context.js.map +1 -0
  99. package/run/execution-session-environment.js +23 -0
  100. package/run/execution-session-environment.js.map +1 -0
  101. package/run/execution-session-host.js +60 -0
  102. package/run/execution-session-host.js.map +1 -0
  103. package/run/execution-session-lifecycle.js +88 -0
  104. package/run/execution-session-lifecycle.js.map +1 -0
  105. package/run/execution-session-process.entry-point.js +15 -0
  106. package/run/execution-session-process.entry-point.js.map +1 -0
  107. package/run/execution-session-process.js +56 -0
  108. package/run/execution-session-process.js.map +1 -0
  109. package/run/execution-session-schema.js +48 -0
  110. package/run/execution-session-schema.js.map +1 -0
  111. package/run/execution-session-supervised.js +82 -0
  112. package/run/execution-session-supervised.js.map +1 -0
  113. package/run/execution-session-types.d.ts +46 -0
  114. package/run/execution-session-types.d.ts.map +1 -0
  115. package/run/execution-session.js +97 -0
  116. package/run/execution-session.js.map +1 -0
  117. package/run/frozen-supervised-command-schema.js +18 -1
  118. package/run/frozen-supervised-command-schema.js.map +1 -1
  119. package/run/node-command-line-runner.d.ts +1 -1
  120. package/run/node-command-line-runner.d.ts.map +1 -1
  121. package/run/node-command-line-runner.js.map +1 -1
  122. package/run/{run-orchestrator.d.ts → node-run-orchestrator-dependencies.d.ts} +1 -1
  123. package/run/node-run-orchestrator-dependencies.d.ts.map +1 -0
  124. package/run/node-run-orchestrator-dependencies.js +43 -0
  125. package/run/node-run-orchestrator-dependencies.js.map +1 -0
  126. package/run/property-collection.js +113 -0
  127. package/run/property-collection.js.map +1 -0
  128. package/run/run-cancellation.js.map +1 -1
  129. package/run/run-case-facts.js +28 -0
  130. package/run/run-case-facts.js.map +1 -0
  131. package/run/run-collected-resolution.js +5 -1
  132. package/run/run-collected-resolution.js.map +1 -1
  133. package/run/run-command-schema.js +3 -1
  134. package/run/run-command-schema.js.map +1 -1
  135. package/run/run-empty-shard.js.map +1 -1
  136. package/run/run-engine-primitives.d.ts +10 -1
  137. package/run/run-engine-primitives.d.ts.map +1 -1
  138. package/run/run-engine-selection.js +1 -0
  139. package/run/run-engine-selection.js.map +1 -1
  140. package/run/run-execution.js.map +1 -1
  141. package/run/run-facts.js +8 -13
  142. package/run/run-facts.js.map +1 -1
  143. package/run/run-in-process-execution.js.map +1 -1
  144. package/run/run-input-resolution.js +4 -4
  145. package/run/run-input-resolution.js.map +1 -1
  146. package/run/run-isolated-command.js +13 -4
  147. package/run/run-isolated-command.js.map +1 -1
  148. package/run/run-isolated-process.js.map +1 -1
  149. package/run/run-local-execution.js.map +1 -1
  150. package/run/run-local-planning.js +2 -1
  151. package/run/run-local-planning.js.map +1 -1
  152. package/run/run-local-resolution.js.map +1 -1
  153. package/run/run-local-test-plan.js +10 -2
  154. package/run/run-local-test-plan.js.map +1 -1
  155. package/run/run-operations.d.ts +2 -2
  156. package/run/run-operations.d.ts.map +1 -1
  157. package/run/run-operations.js.map +1 -1
  158. package/run/run-orchestrator-types.d.ts +9 -0
  159. package/run/run-orchestrator-types.d.ts.map +1 -0
  160. package/run/run-orchestrator.entry-point.d.ts +1 -1
  161. package/run/run-orchestrator.entry-point.d.ts.map +1 -1
  162. package/run/run-orchestrator.js +2 -41
  163. package/run/run-orchestrator.js.map +1 -1
  164. package/run/run-request-types.d.ts +9 -1
  165. package/run/run-request-types.d.ts.map +1 -1
  166. package/run/run-selection-filters.d.ts.map +1 -1
  167. package/run/run-selection-filters.js +11 -1
  168. package/run/run-selection-filters.js.map +1 -1
  169. package/run/run-selection-schema.d.ts.map +1 -1
  170. package/run/run-selection-schema.js +2 -1
  171. package/run/run-selection-schema.js.map +1 -1
  172. package/run/run-selection.js +8 -2
  173. package/run/run-selection.js.map +1 -1
  174. package/run/run-supervised-process.js.map +1 -1
  175. package/run/run-support.js +2 -2
  176. package/run/run-support.js.map +1 -1
  177. package/run/run-test-plan.js +12 -0
  178. package/run/run-test-plan.js.map +1 -1
  179. package/run/run-types.d.ts +27 -10
  180. package/run/run-types.d.ts.map +1 -1
  181. package/run/run-types.js.map +1 -1
  182. package/run/run.js +4 -0
  183. package/run/run.js.map +1 -1
  184. package/run/runtime-attachment-boundary.js +2 -1
  185. package/run/runtime-attachment-boundary.js.map +1 -1
  186. package/run/supervised-child-execution.js +14 -0
  187. package/run/supervised-child-execution.js.map +1 -1
  188. package/run/supervised-child-process.js +7 -3
  189. package/run/supervised-child-process.js.map +1 -1
  190. package/run/supervised-child-test-plan.js +6 -5
  191. package/run/supervised-child-test-plan.js.map +1 -1
  192. package/run/supervised-child.js +24 -10
  193. package/run/supervised-child.js.map +1 -1
  194. package/run/supervised-protocol-schema.js +6 -3
  195. package/run/supervised-protocol-schema.js.map +1 -1
  196. package/run/supervised-protocol.js +3 -17
  197. package/run/supervised-protocol.js.map +1 -1
  198. package/run/supervised-run-runtime.js +3 -0
  199. package/run/supervised-run-runtime.js.map +1 -1
  200. package/run/supervised-run.js +10 -5
  201. package/run/supervised-run.js.map +1 -1
  202. package/run/worker-pool-host-protocol-schema.js +1 -1
  203. package/run/worker-pool-host-protocol-schema.js.map +1 -1
  204. package/run/workload-input-validation.js +5 -0
  205. package/run/workload-input-validation.js.map +1 -1
  206. package/{sbom.cdx.json → software-bill-of-materials.cyclonedx.json} +10 -10
  207. package/run/current-process-run-orchestrator.d.ts.map +0 -1
  208. package/run/run-orchestrator.d.ts.map +0 -1
@@ -0,0 +1,88 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { z } from 'zod/v4';
10
+ import { withCaseExecutionLifecycle } from "../engine/case-execution-lifecycle.js";
11
+ import { withExecutionSession } from "./execution-session-context.js";
12
+ import { withFileModuleBoundary } from "./file-module-boundary.js";
13
+ import { parseRunSelection } from "./run-selection-schema.js";
14
+ function isLifecycleFactory(value) {
15
+ return typeof value === 'function';
16
+ }
17
+ function isExecutionLifecycle(value) {
18
+ return typeof value === 'object' && value !== null &&
19
+ ['select', 'beforeCases', 'enterCase', 'completeCase', 'snapshot', 'dispose'].every(function (method) {
20
+ return typeof Reflect.get(value, method) === 'function';
21
+ });
22
+ }
23
+ function validatedLifecycle(lifecycle) {
24
+ return {
25
+ async select(plan) {
26
+ return parseRunSelection(await lifecycle.select(plan));
27
+ },
28
+ async beforeCases() {
29
+ await lifecycle.beforeCases();
30
+ },
31
+ async enterCase(work) {
32
+ await lifecycle.enterCase(work);
33
+ },
34
+ async completeCase(result, errors) {
35
+ return z.enum(['continue', 'stop']).parse(await lifecycle.completeCase(result, errors));
36
+ },
37
+ snapshot() {
38
+ return z.json().parse(lifecycle.snapshot());
39
+ },
40
+ async dispose() {
41
+ await lifecycle.dispose();
42
+ }
43
+ };
44
+ }
45
+ async function loadExecutionLifecycle(transport) {
46
+ const module = await import(__rewriteRelativeImportExtension(transport.lifecycle.moduleUrl));
47
+ const factory = typeof module === 'object' && module !== null
48
+ ? Reflect.get(module, transport.lifecycle.exportName)
49
+ : null;
50
+ if (!isLifecycleFactory(factory)) {
51
+ throw new TypeError('Execution lifecycle export must be a factory.');
52
+ }
53
+ const created = await factory(structuredClone(transport.data));
54
+ if (!isExecutionLifecycle(created)) {
55
+ throw new TypeError('Execution lifecycle factory returned an invalid lifecycle.');
56
+ }
57
+ return validatedLifecycle(created);
58
+ }
59
+ async function runOwnedLifecycle(lifecycle, run) {
60
+ const [execution] = await Promise.allSettled([withCaseExecutionLifecycle({
61
+ async enter(testCase) {
62
+ await lifecycle.enterCase(testCase.workId);
63
+ },
64
+ complete: lifecycle.completeCase
65
+ }, async function () {
66
+ return await run(lifecycle);
67
+ })]);
68
+ const [disposal] = await Promise.allSettled([lifecycle.dispose()]);
69
+ if (execution.status === 'rejected' && disposal.status === 'rejected') {
70
+ throw new AggregateError([execution.reason, disposal.reason], 'Execution and lifecycle disposal failed.', { cause: execution.reason });
71
+ }
72
+ if (disposal.status === 'rejected') {
73
+ throw disposal.reason;
74
+ }
75
+ if (execution.status === 'rejected') {
76
+ throw execution.reason;
77
+ }
78
+ return execution.value;
79
+ }
80
+ export async function withExecutionLifecycle(transport, boundary, run) {
81
+ return await withExecutionSession(transport, async function () {
82
+ return await withFileModuleBoundary(boundary, async function () {
83
+ const lifecycle = await loadExecutionLifecycle(transport);
84
+ return await runOwnedLifecycle(lifecycle, run);
85
+ });
86
+ });
87
+ }
88
+ //# sourceMappingURL=execution-session-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-lifecycle.js","sourceRoot":"","sources":["../../../../source/run/execution-session-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ import { readProcessEnvironment } from "./node-host-readers.js";
3
+ export const executionSessionProcessUrl = import.meta.url;
4
+ export const executionSessionProcessArgument = '--overkill-execution-session';
5
+ export function readExecutionSessionEnvironment() {
6
+ return readProcessEnvironment(process);
7
+ }
8
+ async function startExecutionSessionHost() {
9
+ await import("./execution-session-host.js");
10
+ }
11
+ if (process.argv[1] === fileURLToPath(executionSessionProcessUrl) &&
12
+ process.argv.includes(executionSessionProcessArgument)) {
13
+ await startExecutionSessionHost();
14
+ }
15
+ //# sourceMappingURL=execution-session-process.entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-process.entry-point.js","sourceRoot":"","sources":["../../../../source/run/execution-session-process.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,8BAA8B,CAAC;AAC9E,MAAM,UAAU,+BAA+B;IAC3C,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,yBAAyB;IACpC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAChD,CAAC;AAED,IACI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,0BAA0B,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EACxD,CAAC;IACC,MAAM,yBAAyB,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { fork } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { sanitizedChildEnvironment } from "./supervised-child-process.js";
4
+ import { executionReplySchema } from "./execution-session-schema.js";
5
+ import { executionSessionProcessArgument, executionSessionProcessUrl, readExecutionSessionEnvironment } from "./execution-session-process.entry-point.js";
6
+ export async function runFreshExecutionSession(command, transport, timeoutMilliseconds, signal) {
7
+ signal.throwIfAborted();
8
+ const child = fork(fileURLToPath(executionSessionProcessUrl), [executionSessionProcessArgument], {
9
+ cwd: command.policy.cwd,
10
+ env: sanitizedChildEnvironment(readExecutionSessionEnvironment(), 'microtest'),
11
+ execArgv: [],
12
+ serialization: 'advanced',
13
+ killSignal: 'SIGKILL',
14
+ signal,
15
+ stdio: ['ignore', 'pipe', 'pipe', 'ipc']
16
+ });
17
+ child.stdout?.resume();
18
+ child.stderr?.resume();
19
+ const closed = new Promise(function (resolve) {
20
+ child.once('close', resolve);
21
+ });
22
+ try {
23
+ return await new Promise(function (resolve, reject) {
24
+ child.once('error', reject);
25
+ child.once('exit', function (code, termination) {
26
+ reject(new Error(`Execution host exited without a result (${String(code)}, ${String(termination)}).`));
27
+ });
28
+ child.once('message', function (message) {
29
+ try {
30
+ resolve(executionReplySchema.parse(message));
31
+ }
32
+ catch (error) {
33
+ reject(error instanceof Error
34
+ ? error
35
+ : new Error('Execution host returned an invalid reply.', { cause: error }));
36
+ }
37
+ });
38
+ child.send({
39
+ policy: command.policy,
40
+ seed: command.invocation.seed,
41
+ selection: command.invocation.selection,
42
+ transport,
43
+ timeoutMilliseconds
44
+ }, function (error) {
45
+ if (error !== null) {
46
+ reject(error);
47
+ }
48
+ });
49
+ });
50
+ }
51
+ finally {
52
+ child.kill('SIGKILL');
53
+ await closed;
54
+ }
55
+ }
56
+ //# sourceMappingURL=execution-session-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-process.js","sourceRoot":"","sources":["../../../../source/run/execution-session-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACH,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAClC,MAAM,4CAA4C,CAAC;AAKpD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAAyB,EACzB,SAAgC,EAChC,mBAA2B,EAC3B,MAAmB;IAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,CAAE,+BAA+B,CAAE,EAAE;QAC/F,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QACvB,GAAG,EAAE,yBAAyB,CAAC,+BAA+B,EAAE,EAAE,WAAW,CAAC;QAC9E,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,SAAS;QACrB,MAAM;QACN,KAAK,EAAE,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAE;KAC7C,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,UAAU,OAAO;QAC9C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACD,OAAO,MAAM,IAAI,OAAO,CAAoB,UAAU,OAAO,EAAE,MAAM;YACjE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CACN,MAAM,EACN,UAAU,IAAI,EAAE,WAAW;gBACvB,MAAM,CACF,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CACjG,CAAC;YACN,CAAC,CACJ,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,OAAO;gBACnC,IAAI,CAAC;oBACD,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjD,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACtB,MAAM,CACF,KAAK,YAAY,KAAK;wBAClB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,KAAK,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACjF,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CACN;gBACI,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;gBAC7B,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS;gBACvC,SAAS;gBACT,mBAAmB;aACtB,EACD,UAAU,KAAK;gBACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;YAAS,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,MAAM,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { z } from 'zod/v4';
2
+ import { createPlainOutputRenderer } from "../engine/reporter-output.js";
3
+ import { frozenMicrotestPolicySchema } from "./frozen-run-policy-schema.js";
4
+ import { runResultSchema } from "./run-result-schema.js";
5
+ import { runExecutionFailureSchema } from "./execution-failure-schema.js";
6
+ import { runSelectionSchema } from "./run-selection-schema.js";
7
+ import { parseFrozenMicrotestPolicy } from "./frozen-run-policy.js";
8
+ import { RunResolutionError } from "./run-errors.js";
9
+ export function normalizeExecutionSessionOptions(supplied, createSeed) {
10
+ if (supplied.command.policy.request.coverage || supplied.command.policy.request.baselineUpdateMode !== 'none') {
11
+ throw new RunResolutionError('Memory execution sessions do not support recorded coverage or baseline updates.', undefined, 'unsupported-request');
12
+ }
13
+ return {
14
+ ...supplied,
15
+ lifecycle: { ...supplied.lifecycle },
16
+ command: {
17
+ ...supplied.command,
18
+ policy: parseFrozenMicrotestPolicy(supplied.command.policy),
19
+ invocation: {
20
+ seed: { value: supplied.command.invocation.seed.value ?? createSeed() },
21
+ selection: runSelectionSchema.parse(supplied.command.invocation.selection)
22
+ },
23
+ reporting: { outputRenderer: createPlainOutputRenderer(), reporters: [] }
24
+ }
25
+ };
26
+ }
27
+ export const executionTransportSchema = z.strictObject({
28
+ lifecycle: z.strictObject({ moduleUrl: z.url(), exportName: z.string().min(1) }),
29
+ data: z.json()
30
+ });
31
+ export const executionReplySchema = z.discriminatedUnion('kind', [
32
+ z.strictObject({
33
+ kind: z.literal('result'),
34
+ result: runResultSchema,
35
+ data: z.json(),
36
+ deadlineExceeded: z.boolean()
37
+ }),
38
+ z.strictObject({ kind: z.literal('failure'), failure: runExecutionFailureSchema, data: z.json() }),
39
+ z.strictObject({ kind: z.literal('timeout'), data: z.json() })
40
+ ]);
41
+ export const executionHostRequestSchema = z.strictObject({
42
+ policy: frozenMicrotestPolicySchema,
43
+ seed: z.strictObject({ value: z.bigint().nonnegative() }),
44
+ selection: runSelectionSchema,
45
+ transport: executionTransportSchema,
46
+ timeoutMilliseconds: z.number().positive()
47
+ });
48
+ //# sourceMappingURL=execution-session-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-schema.js","sourceRoot":"","sources":["../../../../source/run/execution-session-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { createStoredValue } from "../stored-value.js";
2
+ import { envelopeMessage } from "./child-process-protocol.js";
3
+ import { supervisedChildMessageSchema } from "./supervised-protocol-schema.js";
4
+ import { supervisedChildCorrelationId } from "./supervised-protocol.js";
5
+ import { createRunOperations } from "./run-operations.js";
6
+ import { withExecutionSession } from "./execution-session-context.js";
7
+ import { runExecutionFailure } from "./execution-failure.js";
8
+ function readExecutionData(observation, message) {
9
+ const decoded = envelopeMessage(message, supervisedChildCorrelationId, supervisedChildMessageSchema);
10
+ if (decoded?.kind !== 'execution-data') {
11
+ return;
12
+ }
13
+ if (observation.delivered.read()) {
14
+ throw new Error('Duplicate execution lifecycle data.');
15
+ }
16
+ observation.delivered.write(true);
17
+ observation.data.write(decoded.data);
18
+ }
19
+ function observeExecutionMessage(observation, message) {
20
+ try {
21
+ readExecutionData(observation, message);
22
+ }
23
+ catch (error) {
24
+ observation.failure.write(error instanceof Error ? error : new Error('Invalid execution lifecycle data.', { cause: error }));
25
+ observation.invalid.abort();
26
+ }
27
+ }
28
+ function observedDependencies(dependencies, observation) {
29
+ return {
30
+ ...dependencies,
31
+ async startSupervisedChild(input) {
32
+ const child = await dependencies.startSupervisedChild(input);
33
+ child.on('message', function (message) {
34
+ observeExecutionMessage(observation, message);
35
+ });
36
+ return child;
37
+ }
38
+ };
39
+ }
40
+ function missingDataReply(result, call) {
41
+ if (call.signal.aborted && result.runnerErrors.every(function (error) {
42
+ return error.subtype === 'crash';
43
+ })) {
44
+ return { kind: 'failure', failure: runExecutionFailure(call.signal.reason), data: null };
45
+ }
46
+ const errors = result
47
+ .runnerErrors
48
+ .map(function (error) {
49
+ return error.message;
50
+ })
51
+ .join('\n');
52
+ return {
53
+ kind: 'failure',
54
+ failure: runExecutionFailure(new Error(`Execution lifecycle data was not delivered. ${errors}`)),
55
+ data: null
56
+ };
57
+ }
58
+ function observedReply(result, call, observation) {
59
+ const failure = observation.failure.read();
60
+ if (failure !== null) {
61
+ return { kind: 'failure', failure: runExecutionFailure(failure), data: observation.data.read() };
62
+ }
63
+ if (!observation.delivered.read()) {
64
+ return missingDataReply(result, call);
65
+ }
66
+ return { kind: 'result', result, data: observation.data.read(), deadlineExceeded: false };
67
+ }
68
+ export async function runSupervisedExecutionSession(options, dependencies, call) {
69
+ const observation = {
70
+ data: createStoredValue(null),
71
+ delivered: createStoredValue(false),
72
+ failure: createStoredValue(null),
73
+ invalid: new AbortController()
74
+ };
75
+ const operations = createRunOperations(observedDependencies(dependencies, observation), 'test');
76
+ const signal = AbortSignal.any([call.signal, observation.invalid.signal]);
77
+ const result = await withExecutionSession(call.transport, async function () {
78
+ return await operations.run(options.command, { signal, timing: null });
79
+ });
80
+ return observedReply(result, call, observation);
81
+ }
82
+ //# sourceMappingURL=execution-session-supervised.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-supervised.js","sourceRoot":"","sources":["../../../../source/run/execution-session-supervised.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { JsonValue } from 'type-fest';
2
+ import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
3
+ import type { RunResult, RunnerError } from './run-engine-primitives.ts';
4
+ type ExecutionFailureDetails = {
5
+ readonly name: string;
6
+ readonly message: string;
7
+ readonly cause: unknown;
8
+ readonly stack: string | null;
9
+ };
10
+ type ExecutionFailureKind = {
11
+ readonly kind: 'collection-error';
12
+ readonly errors: NonEmptyReadonlyArray<RunnerError>;
13
+ } | {
14
+ readonly kind: 'config-error';
15
+ } | {
16
+ readonly kind: 'error';
17
+ } | {
18
+ readonly kind: 'resolution-error';
19
+ readonly code: 'invalid-request' | 'no-tests-collected' | 'unsupported-request';
20
+ };
21
+ export type RunExecutionFailure = ExecutionFailureDetails & ExecutionFailureKind;
22
+ export type RunExecutionInvocation = {
23
+ readonly data: JsonValue;
24
+ readonly timeoutMilliseconds: number;
25
+ readonly signal: AbortSignal | null;
26
+ };
27
+ export type RunExecutionReply = {
28
+ readonly kind: 'failure';
29
+ readonly failure: RunExecutionFailure;
30
+ readonly data: JsonValue;
31
+ } | {
32
+ readonly kind: 'result';
33
+ readonly result: RunResult;
34
+ readonly data: JsonValue;
35
+ readonly deadlineExceeded: boolean;
36
+ } | {
37
+ readonly kind: 'timeout';
38
+ readonly data: JsonValue;
39
+ };
40
+ export type RunExecutionSession = {
41
+ readonly environmentLifetime: 'fresh' | 'reused';
42
+ readonly run: (invocation: RunExecutionInvocation) => Promise<RunExecutionReply>;
43
+ readonly dispose: () => Promise<void>;
44
+ };
45
+ export {};
46
+ //# sourceMappingURL=execution-session-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session-types.d.ts","sourceRoot":"","sources":["../../../../source/run/execution-session-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzE,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AACF,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;CACvD,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CACjC,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;AAEjF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACtC,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,sBAAsB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { setTimeout as scheduleDeadline, clearTimeout as cancelDeadline } from 'node:timers';
2
+ import { createStoredValue } from "../stored-value.js";
3
+ import { runExecutionFailure } from "./execution-failure.js";
4
+ import { executionTransportSchema, normalizeExecutionSessionOptions } from "./execution-session-schema.js";
5
+ async function initializeExecutionEnvironment(options, dependencies) {
6
+ const { createExecutionSessionEnvironment } = await import("./execution-session-environment.js");
7
+ return createExecutionSessionEnvironment(options, dependencies);
8
+ }
9
+ function deadlineCancelledReply(reply, signal, expired) {
10
+ return reply.kind === 'failure' && expired && signal.reason instanceof Error &&
11
+ reply.failure.message === signal.reason.message;
12
+ }
13
+ async function completeInvocation(environment, execution) {
14
+ const { invocation, signal, expired, lifecycle } = execution;
15
+ signal.throwIfAborted();
16
+ const transport = executionTransportSchema.parse({ lifecycle, data: structuredClone(invocation.data) });
17
+ const initialized = await environment;
18
+ const reply = await initialized.execute({ transport, timeoutMilliseconds: invocation.timeoutMilliseconds, signal });
19
+ if (deadlineCancelledReply(reply, signal, expired())) {
20
+ return { kind: 'timeout', data: reply.data };
21
+ }
22
+ return reply.kind === 'result' ? { ...reply, deadlineExceeded: reply.deadlineExceeded || expired() } : reply;
23
+ }
24
+ function cancelledDeadline(error, signal, expired) {
25
+ return expired && (error === signal.reason || error instanceof Error && error.cause === signal.reason);
26
+ }
27
+ async function executeInvocation(environment, invocation, disposed, lifecycle) {
28
+ const cancellation = new AbortController();
29
+ const signal = AbortSignal.any([
30
+ disposed,
31
+ cancellation.signal,
32
+ ...invocation.signal === null ? [] : [invocation.signal]
33
+ ]);
34
+ const expired = createStoredValue(false);
35
+ const started = performance.now();
36
+ const deadlineExpired = function () {
37
+ return expired.read() || performance.now() - started >= invocation.timeoutMilliseconds;
38
+ };
39
+ const timer = scheduleDeadline(function cancelExpiredInvocation() {
40
+ expired.write(true);
41
+ cancellation.abort();
42
+ }, invocation.timeoutMilliseconds);
43
+ try {
44
+ return await completeInvocation(environment, { invocation, signal, expired: deadlineExpired, lifecycle });
45
+ }
46
+ catch (error) {
47
+ return cancelledDeadline(error, signal, expired.read())
48
+ ? { kind: 'timeout', data: null }
49
+ : { kind: 'failure', failure: runExecutionFailure(error), data: null };
50
+ }
51
+ finally {
52
+ cancelDeadline(timer);
53
+ }
54
+ }
55
+ function assertSessionAdmission(disposed, active) {
56
+ if (disposed.aborted) {
57
+ throw new Error('Execution session has been disposed.');
58
+ }
59
+ if (active !== null) {
60
+ throw new Error('An execution invocation is already running.');
61
+ }
62
+ }
63
+ function executionLifetime(options) {
64
+ const fresh = options.environment === 'fresh-invocation' ||
65
+ options.command.policy.profile.execution.processModel === 'supervised-process';
66
+ return fresh ? 'fresh' : 'reused';
67
+ }
68
+ export function createExecutionSession(supplied, dependencies) {
69
+ const options = normalizeExecutionSessionOptions(supplied, dependencies.createSeed);
70
+ const environment = createStoredValue(null);
71
+ const disposed = new AbortController();
72
+ const active = createStoredValue(null);
73
+ return {
74
+ environmentLifetime: executionLifetime(options),
75
+ async run(invocation) {
76
+ assertSessionAdmission(disposed.signal, active.read());
77
+ if (!Number.isFinite(invocation.timeoutMilliseconds) || invocation.timeoutMilliseconds <= 0) {
78
+ return { kind: 'timeout', data: null };
79
+ }
80
+ const initialized = environment.read() ?? initializeExecutionEnvironment(options, dependencies);
81
+ environment.write(initialized);
82
+ const running = executeInvocation(initialized, invocation, disposed.signal, options.lifecycle);
83
+ active.write(running);
84
+ try {
85
+ return await running;
86
+ }
87
+ finally {
88
+ active.write(null);
89
+ }
90
+ },
91
+ async dispose() {
92
+ disposed.abort();
93
+ await active.read();
94
+ }
95
+ };
96
+ }
97
+ //# sourceMappingURL=execution-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-session.js","sourceRoot":"","sources":["../../../../source/run/execution-session.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { frozenMicrotestPolicySchema } from "./frozen-run-policy-schema.js";
4
4
  import { parseFrozenMicrotestPolicy, policyBaselineCommand } from "./frozen-run-policy.js";
5
5
  import { createSupervisedCollectCommand, createSupervisedRunCommand } from "./run-isolated-command.js";
6
6
  import { supervisedCommandFields } from "./run-command-schema.js";
7
+ import { executionTransportSchema } from "./execution-session-schema.js";
7
8
  export const frozenSupervisedCommandSchema = z
8
9
  .strictObject({
9
10
  ...supervisedCommandFields,
@@ -18,9 +19,25 @@ export const frozenSupervisedCommandSchema = z
18
19
  const expected = command.kind === 'collect-frozen'
19
20
  ? createSupervisedCollectCommand(baseline, profile, policy.files, source)
20
21
  : createSupervisedRunCommand(baseline, profile, policy.files, source);
21
- if (!isDeepStrictEqual(command, expected)) {
22
+ const normalized = expected.kind === 'run-session'
23
+ ? Object.fromEntries(Object.entries({ ...expected, kind: 'run-frozen' }).filter(function ([key]) {
24
+ return key !== 'session';
25
+ }))
26
+ : expected;
27
+ if (!isDeepStrictEqual(command, normalized)) {
22
28
  throw new TypeError('Supervised command conflicts with frozen policy.');
23
29
  }
24
30
  return { ...command, policy };
25
31
  });
32
+ export const sessionSupervisedCommandSchema = z
33
+ .strictObject({
34
+ ...supervisedCommandFields,
35
+ kind: z.literal('run-session'),
36
+ policy: frozenMicrotestPolicySchema,
37
+ session: executionTransportSchema
38
+ })
39
+ .transform(function ({ session, ...command }) {
40
+ const validated = frozenSupervisedCommandSchema.parse({ ...command, kind: 'run-frozen' });
41
+ return { ...validated, kind: 'run-session', policy: command.policy, session };
42
+ });
26
43
  //# sourceMappingURL=frozen-supervised-command-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frozen-supervised-command-schema.js","sourceRoot":"","sources":["../../../../source/run/frozen-supervised-command-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,CAAC,MAAM,6BAA6B,GAAsC,CAAC;KAC5E,YAAY,CAAC;IACV,GAAG,uBAAuB;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAE,gBAAgB,EAAE,YAAY,CAAE,CAAC;IAChD,MAAM,EAAE,2BAA2B;CACtC,CAAC;KACD,SAAS,CAAC,SAAS,qBAAqB,CAAC,OAAO;IAC7C,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,eAAwB,EAAE,MAAM,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAC9C,CAAC,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QACzE,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"frozen-supervised-command-schema.js","sourceRoot":"","sources":["../../../../source/run/frozen-supervised-command-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,CAAC,MAAM,6BAA6B,GAAsC,CAAC;KAC5E,YAAY,CAAC;IACV,GAAG,uBAAuB;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAE,gBAAgB,EAAE,YAAY,CAAE,CAAC;IAChD,MAAM,EAAE,2BAA2B;CACtC,CAAC;KACD,SAAS,CAAC,SAAS,qBAAqB,CAAC,OAAO;IAC7C,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,eAAwB,EAAE,MAAM,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAC9C,CAAC,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QACzE,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,KAAK,aAAa;QAC9C,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAE,GAAG,CAAE;YACxE,OAAO,GAAG,KAAK,SAAS,CAAC;QAC7B,CAAC,CAAC,CACL;QACD,CAAC,CAAC,QAAQ,CAAC;IACf,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC1C,YAAY,CAAC;IACV,GAAG,uBAAuB;IAC1B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,wBAAwB;CACpC,CAAC;KACD,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IACxC,MAAM,SAAS,GAAG,6BAA6B,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,aAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3F,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { Engine } from '../engine/engine.ts';
2
2
  import { type CommandLineRunner, type CommandLineRunnerDependencies } from './command-line-runner.ts';
3
- import { type CurrentProcessRunOrchestratorDependencies } from './current-process-run-orchestrator.ts';
3
+ import type { CurrentProcessRunOrchestratorDependencies } from './current-process-run-input.ts';
4
4
  type NodeCommandLineRunDiscovery = CurrentProcessRunOrchestratorDependencies['discoverRunFilesWithProjectRoot'];
5
5
  type NodeCommandLineStartSupervisedChild = CurrentProcessRunOrchestratorDependencies['startSupervisedChild'];
6
6
  type NodeCommandLineStartWorkerPoolHost = CurrentProcessRunOrchestratorDependencies['startWorkerPoolHost'];
@@ -1 +1 @@
1
- {"version":3,"file":"node-command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EACrC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEH,KAAK,yCAAyC,EACjD,MAAM,uCAAuC,CAAC;AAK/C,KAAK,2BAA2B,GAAG,yCAAyC,CAAC,iCAAiC,CAAC,CAAC;AAChH,KAAK,mCAAmC,GAAG,yCAAyC,CAAC,sBAAsB,CAAC,CAAC;AAC7G,KAAK,kCAAkC,GAAG,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;AAE3G,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACjE,QAAQ,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;IAC/F,QAAQ,CAAC,kBAAkB,EAAE,yCAAyC,CAAC,oBAAoB,CAAC,CAAC;IAC7F,QAAQ,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;IACnE,QAAQ,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GAAG;IACpE,QAAQ,CAAC,YAAY,EAAE,iCAAiC,CAAC;CAC5D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,iBAAiB,CAwBhG"}
1
+ {"version":3,"file":"node-command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EACrC,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,gCAAgC,CAAC;AAKhG,KAAK,2BAA2B,GAAG,yCAAyC,CAAC,iCAAiC,CAAC,CAAC;AAChH,KAAK,mCAAmC,GAAG,yCAAyC,CAAC,sBAAsB,CAAC,CAAC;AAC7G,KAAK,kCAAkC,GAAG,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;AAE3G,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACjE,QAAQ,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;IAC/F,QAAQ,CAAC,kBAAkB,EAAE,yCAAyC,CAAC,oBAAoB,CAAC,CAAC;IAC7F,QAAQ,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;IACnE,QAAQ,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GAAG;IACpE,QAAQ,CAAC,YAAY,EAAE,iCAAiC,CAAC;CAC5D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,iBAAiB,CAwBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AACA,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,mCAAmC,EAEtC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACH,iCAAiC,EACpC,MAAM,0CAA0C,CAAC;AAuBlD,MAAM,UAAU,2BAA2B,CAAC,KAAiC;IACzE,MAAM,YAAY,GAAG,mCAAmC,CAAC,KAAK,CAAC,aAAa,EAAE;QAC1E,+BAA+B,EAAE,KAAK,CAAC,YAAY,CAAC,+BAA+B;QACnF,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;QAC3D,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,kBAAkB;QACzD,oBAAoB,EAAE,KAAK,CAAC,YAAY,CAAC,oBAAoB;QAC7D,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;KAC9D,CAAC,CAAC;IAEH,OAAO,uBAAuB,CAAC;QAC3B,qBAAqB,EAAE,uBAAuB;QAC9C,oBAAoB,EAAE,iCAAiC;QACvD,KAAK,CAAC,qBAAqB;YACvB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAE5E,OAAO,uBAAuB,CAAC;gBAC3B,qBAAqB,EAAE,uBAAuB;gBAC9C,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;gBACzC,YAAY;aACf,CAAC,CAAC;QACP,CAAC;QACD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;QACzC,YAAY;KACf,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"node-command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AACA,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,mCAAmC,EACtC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACH,iCAAiC,EACpC,MAAM,0CAA0C,CAAC;AAuBlD,MAAM,UAAU,2BAA2B,CAAC,KAAiC;IACzE,MAAM,YAAY,GAAG,mCAAmC,CAAC,KAAK,CAAC,aAAa,EAAE;QAC1E,+BAA+B,EAAE,KAAK,CAAC,YAAY,CAAC,+BAA+B;QACnF,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;QAC3D,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,kBAAkB;QACzD,oBAAoB,EAAE,KAAK,CAAC,YAAY,CAAC,oBAAoB;QAC7D,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;KAC9D,CAAC,CAAC;IAEH,OAAO,uBAAuB,CAAC;QAC3B,qBAAqB,EAAE,uBAAuB;QAC9C,oBAAoB,EAAE,iCAAiC;QACvD,KAAK,CAAC,qBAAqB;YACvB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAE5E,OAAO,uBAAuB,CAAC;gBAC3B,qBAAqB,EAAE,uBAAuB;gBAC9C,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;gBACzC,YAAY;aACf,CAAC,CAAC;QACP,CAAC;QACD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;QACzC,YAAY;KACf,CAAC,CAAC;AACP,CAAC"}
@@ -22,4 +22,4 @@ export type NodeRunOrchestratorInput = {
22
22
  };
23
23
  };
24
24
  export {};
25
- //# sourceMappingURL=run-orchestrator.d.ts.map
25
+ //# sourceMappingURL=node-run-orchestrator-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-run-orchestrator-dependencies.d.ts","sourceRoot":"","sources":["../../../../source/run/node-run-orchestrator-dependencies.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAEpH,KAAK,4BAA4B,GAAG,2BAA2B,CAAC,yBAAyB,CAAC,CAAC;AAE3F,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC,eAAe,CAAC,CAAC;IACrE,QAAQ,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,iCAAiC,CAAC,CAAC;IACzG,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;IAClF,QAAQ,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IAC1E,QAAQ,CAAC,WAAW,EAAE,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAClE,QAAQ,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;IACjF,QAAQ,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;IAC/E,QAAQ,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,sBAAsB,CAAC,CAAC;IACnF,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9C,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9C,CAAC;CACL,CAAC;AAEF"}
@@ -0,0 +1,43 @@
1
+ import os from 'node:os';
2
+ import { createClock } from '@enormora/clock';
3
+ import { createReporterDispatcher } from "../engine/reporter-dispatcher.js";
4
+ import { createNodeExecutionDependencies } from "./node-run-execution.js";
5
+ import { createRandomRunSeed } from "./run-seed.js";
6
+ export function createNodeRunOrchestratorDependencies(input) {
7
+ const wallClock = createClock();
8
+ const reporterDispatcher = createReporterDispatcher({
9
+ stderr: input.stderr,
10
+ stdout: input.stdout,
11
+ wallClock
12
+ });
13
+ return {
14
+ availableParallelism: os.availableParallelism(),
15
+ createSeed: createRandomRunSeed,
16
+ ...createNodeExecutionDependencies({
17
+ readEnvironment: input.readEnvironment,
18
+ reporterDispatcher,
19
+ startWorkerPoolHost: input.startWorkerPoolHost,
20
+ wallClock
21
+ }),
22
+ defaultEngine: input.defaultEngine,
23
+ discoverRunFilesWithProjectRoot: input.discoverRunFilesWithProjectRoot,
24
+ loadRunEngineModule: input.loadRunEngineModule,
25
+ loadRunTestModules: input.loadRunTestModules,
26
+ liveOutput: {
27
+ stderr: { write: input.stderr.write },
28
+ stdout: { write: input.stdout.write }
29
+ },
30
+ node: input.node,
31
+ reporterDispatcher,
32
+ startSupervisedChild: input.startSupervisedChild,
33
+ startWorkerPoolHost: input.startWorkerPoolHost,
34
+ runtimeCapabilityPolicy: {
35
+ observeIpcListeners: input.observeIpcListeners,
36
+ observeProcessExit: input.observeProcessExit,
37
+ readEnvironment: input.readEnvironment,
38
+ readStorage: input.readStorage
39
+ },
40
+ wallClock
41
+ };
42
+ }
43
+ //# sourceMappingURL=node-run-orchestrator-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-run-orchestrator-dependencies.js","sourceRoot":"","sources":["../../../../source/run/node-run-orchestrator-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AA2BpD,MAAM,UAAU,qCAAqC,CAAC,KAA+B;IACjF,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;IAChC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS;KACZ,CAAC,CAAC;IAEH,OAAO;QACH,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,EAAE;QAC/C,UAAU,EAAE,mBAAmB;QAC/B,GAAG,+BAA+B,CAAC;YAC/B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,kBAAkB;YAClB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,SAAS;SACZ,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,+BAA+B,EAAE,KAAK,CAAC,+BAA+B;QACtE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,UAAU,EAAE;YACR,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;YACrC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;SACxC;QACD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,kBAAkB;QAClB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,uBAAuB,EAAE;YACrB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC;QACD,SAAS;KACZ,CAAC;AACN,CAAC"}