@overkill-dev/run 0.0.64 → 0.0.66

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 (275) hide show
  1. package/attachments/attachment-context.js +41 -0
  2. package/attachments/attachment-context.js.map +1 -0
  3. package/attachments/failure-artifact-stream.js +53 -0
  4. package/attachments/failure-artifact-stream.js.map +1 -0
  5. package/attachments/resource-failure-context.js +41 -0
  6. package/attachments/resource-failure-context.js.map +1 -0
  7. package/engine/case-execution.d.ts +1 -0
  8. package/engine/case-execution.d.ts.map +1 -1
  9. package/engine/case-execution.js +17 -29
  10. package/engine/case-execution.js.map +1 -1
  11. package/engine/recorded-assertion-failure.js +30 -0
  12. package/engine/recorded-assertion-failure.js.map +1 -0
  13. package/engine/run-artifact.d.ts +2 -2
  14. package/engine/run-artifact.d.ts.map +1 -1
  15. package/engine/run-result.d.ts +5 -1
  16. package/engine/run-result.d.ts.map +1 -1
  17. package/engine/run-result.js.map +1 -1
  18. package/engine/runtime-attachment.d.ts +82 -0
  19. package/engine/runtime-attachment.d.ts.map +1 -0
  20. package/engine/runtime-attachment.js +7 -0
  21. package/engine/runtime-attachment.js.map +1 -0
  22. package/package-version.js +31 -0
  23. package/package-version.js.map +1 -0
  24. package/package.json +29 -3
  25. package/packages/resources/attachment-context.entry-point.js +2 -0
  26. package/packages/resources/attachment-context.entry-point.js.map +1 -0
  27. package/packages/run/config.entry-point.d.ts +1 -1
  28. package/packages/run/config.entry-point.d.ts.map +1 -1
  29. package/packages/run/run.entry-point.d.ts +1 -1
  30. package/packages/run/run.entry-point.d.ts.map +1 -1
  31. package/packages/simulation/transcript.entry-point.js +2 -0
  32. package/packages/simulation/transcript.entry-point.js.map +1 -1
  33. package/readme.md +41 -7
  34. package/reporters/human-reporter-rendering.js +59 -15
  35. package/reporters/human-reporter-rendering.js.map +1 -1
  36. package/resources/failure-artifacts.js +9 -0
  37. package/resources/failure-artifacts.js.map +1 -0
  38. package/resources/resource-definition-brand.js +1 -1
  39. package/resources/resource-definition-brand.js.map +1 -1
  40. package/resources/resource-definition-types.d.ts.map +1 -1
  41. package/resources/resource-scenario-binding.js +2 -0
  42. package/resources/resource-scenario-binding.js.map +1 -1
  43. package/resources/resource-session.d.ts.map +1 -1
  44. package/resources/runtime-definition.d.ts.map +1 -1
  45. package/resources/runtime-definition.js +1 -1
  46. package/resources/runtime-definition.js.map +1 -1
  47. package/resources/runtime-matrix-definition.d.ts.map +1 -1
  48. package/resources/runtime-matrix-definition.js +2 -2
  49. package/resources/runtime-matrix-definition.js.map +1 -1
  50. package/run/assertion-result-schema.js +69 -0
  51. package/run/assertion-result-schema.js.map +1 -0
  52. package/run/attachment-connection.js +108 -0
  53. package/run/attachment-connection.js.map +1 -0
  54. package/run/attachment-coordinator-context.js +9 -0
  55. package/run/attachment-coordinator-context.js.map +1 -0
  56. package/run/attachment-coordinator.js +81 -0
  57. package/run/attachment-coordinator.js.map +1 -0
  58. package/run/attachment-eligibility.js +21 -0
  59. package/run/attachment-eligibility.js.map +1 -0
  60. package/run/attachment-execution.js +302 -0
  61. package/run/attachment-execution.js.map +1 -0
  62. package/run/attachment-failure.js +63 -0
  63. package/run/attachment-failure.js.map +1 -0
  64. package/run/attachment-frames.js +22 -0
  65. package/run/attachment-frames.js.map +1 -0
  66. package/run/attachment-json.js +118 -0
  67. package/run/attachment-json.js.map +1 -0
  68. package/run/attachment-protocol.js +9 -0
  69. package/run/attachment-protocol.js.map +1 -0
  70. package/run/attachment-record.js +60 -0
  71. package/run/attachment-record.js.map +1 -0
  72. package/run/attachment-reporter.js +40 -0
  73. package/run/attachment-reporter.js.map +1 -0
  74. package/run/attachment-results.js +111 -0
  75. package/run/attachment-results.js.map +1 -0
  76. package/run/attachment-retention.js +153 -0
  77. package/run/attachment-retention.js.map +1 -0
  78. package/run/attachment-run.js +36 -0
  79. package/run/attachment-run.js.map +1 -0
  80. package/run/attachment-server.js +136 -0
  81. package/run/attachment-server.js.map +1 -0
  82. package/run/attachment-storage-session.js +22 -0
  83. package/run/attachment-storage-session.js.map +1 -0
  84. package/run/attachment-storage-writer.js +128 -0
  85. package/run/attachment-storage-writer.js.map +1 -0
  86. package/run/attachment-store.js +287 -0
  87. package/run/attachment-store.js.map +1 -0
  88. package/run/attachment-wire-schema.js +159 -0
  89. package/run/attachment-wire-schema.js.map +1 -0
  90. package/run/attachment-worker-context.js +49 -0
  91. package/run/attachment-worker-context.js.map +1 -0
  92. package/run/attachment-writer.js +119 -0
  93. package/run/attachment-writer.js.map +1 -0
  94. package/run/capability-policy-snapshots.d.ts +3 -2
  95. package/run/capability-policy-snapshots.d.ts.map +1 -1
  96. package/run/capability-policy-snapshots.js.map +1 -1
  97. package/run/capability-policy.js +48 -38
  98. package/run/capability-policy.js.map +1 -1
  99. package/run/child-process-protocol.js +17 -13
  100. package/run/child-process-protocol.js.map +1 -1
  101. package/run/child-process-shutdown.js +54 -0
  102. package/run/child-process-shutdown.js.map +1 -0
  103. package/run/collected-run-plan-schema.js +90 -0
  104. package/run/collected-run-plan-schema.js.map +1 -0
  105. package/run/coverage-config-schema.d.ts +6 -6
  106. package/run/coverage-runtime-source.js +5 -0
  107. package/run/coverage-runtime-source.js.map +1 -1
  108. package/run/coverage-source-selection.js +6 -2
  109. package/run/coverage-source-selection.js.map +1 -1
  110. package/run/current-process-run-orchestrator.js +7 -11
  111. package/run/current-process-run-orchestrator.js.map +1 -1
  112. package/run/diff-schema.js +78 -0
  113. package/run/diff-schema.js.map +1 -0
  114. package/run/failure-artifact-retention.js +76 -0
  115. package/run/failure-artifact-retention.js.map +1 -0
  116. package/run/node-child-process-starters.js +8 -1
  117. package/run/node-child-process-starters.js.map +1 -1
  118. package/run/node-process-policy-observation.js +43 -0
  119. package/run/node-process-policy-observation.js.map +1 -0
  120. package/run/permission-denial-runtime-policy.js +3 -0
  121. package/run/permission-denial-runtime-policy.js.map +1 -1
  122. package/run/reporter-event-schema.js +42 -0
  123. package/run/reporter-event-schema.js.map +1 -0
  124. package/run/resource-disposal-error.js +27 -0
  125. package/run/resource-disposal-error.js.map +1 -0
  126. package/run/resource-failure-preparation.js +86 -0
  127. package/run/resource-failure-preparation.js.map +1 -0
  128. package/run/resource-lifecycle-disposal.js +132 -0
  129. package/run/resource-lifecycle-disposal.js.map +1 -0
  130. package/run/resource-lifecycle-projection.js +6 -2
  131. package/run/resource-lifecycle-projection.js.map +1 -1
  132. package/run/resource-lifecycle-session-acquirer.js +31 -8
  133. package/run/resource-lifecycle-session-acquirer.js.map +1 -1
  134. package/run/resource-lifecycle-startup-budget.js +1 -0
  135. package/run/resource-lifecycle-startup-budget.js.map +1 -1
  136. package/run/resource-lifecycle-state.d.ts +2 -1
  137. package/run/resource-lifecycle-state.d.ts.map +1 -1
  138. package/run/resource-lifecycle-state.js +40 -1
  139. package/run/resource-lifecycle-state.js.map +1 -1
  140. package/run/resource-lifecycle.js +47 -107
  141. package/run/resource-lifecycle.js.map +1 -1
  142. package/run/retry-artifact-retention.js.map +1 -1
  143. package/run/run-artifact-id-schema.js +27 -0
  144. package/run/run-artifact-id-schema.js.map +1 -0
  145. package/run/run-artifact-schema.js +74 -0
  146. package/run/run-artifact-schema.js.map +1 -0
  147. package/run/run-collection-error-result.js +1 -1
  148. package/run/run-collection-error-result.js.map +1 -1
  149. package/run/run-command-schema.js +60 -0
  150. package/run/run-command-schema.js.map +1 -0
  151. package/run/run-config-schema.d.ts +25 -6
  152. package/run/run-config-schema.d.ts.map +1 -1
  153. package/run/run-config-schema.js +11 -0
  154. package/run/run-config-schema.js.map +1 -1
  155. package/run/run-config.d.ts +7 -5
  156. package/run/run-config.d.ts.map +1 -1
  157. package/run/run-config.js +2 -1
  158. package/run/run-config.js.map +1 -1
  159. package/run/run-engine-primitives.d.ts +12 -1
  160. package/run/run-engine-primitives.d.ts.map +1 -1
  161. package/run/run-errors.d.ts +2 -0
  162. package/run/run-errors.d.ts.map +1 -1
  163. package/run/run-errors.js +17 -0
  164. package/run/run-errors.js.map +1 -1
  165. package/run/run-facts.js +1 -0
  166. package/run/run-facts.js.map +1 -1
  167. package/run/run-identity-schema.js +38 -0
  168. package/run/run-identity-schema.js.map +1 -0
  169. package/run/run-isolated-command.js +1 -0
  170. package/run/run-isolated-command.js.map +1 -1
  171. package/run/run-local-command.js +20 -4
  172. package/run/run-local-command.js.map +1 -1
  173. package/run/run-local-coverage.js +16 -3
  174. package/run/run-local-coverage.js.map +1 -1
  175. package/run/run-local-execution.js +2 -1
  176. package/run/run-local-execution.js.map +1 -1
  177. package/run/run-local-resolution.js.map +1 -1
  178. package/run/run-orchestrator.d.ts +2 -2
  179. package/run/run-orchestrator.d.ts.map +1 -1
  180. package/run/run-orchestrator.js +2 -2
  181. package/run/run-orchestrator.js.map +1 -1
  182. package/run/run-record-input.js.map +1 -1
  183. package/run/run-record-outcomes.d.ts +4 -1
  184. package/run/run-record-outcomes.d.ts.map +1 -1
  185. package/run/run-record-versions.js +1 -30
  186. package/run/run-record-versions.js.map +1 -1
  187. package/run/run-record.js.map +1 -1
  188. package/run/run-result-schema.js +65 -0
  189. package/run/run-result-schema.js.map +1 -0
  190. package/run/run-runtime-schema.js +64 -0
  191. package/run/run-runtime-schema.js.map +1 -0
  192. package/run/run-support.js +10 -1
  193. package/run/run-support.js.map +1 -1
  194. package/run/run-types.d.ts +3 -4
  195. package/run/run-types.d.ts.map +1 -1
  196. package/run/run-types.js.map +1 -1
  197. package/run/run-validation.js +9 -0
  198. package/run/run-validation.js.map +1 -1
  199. package/run/runtime-attachment-boundary.js +11 -0
  200. package/run/runtime-attachment-boundary.js.map +1 -0
  201. package/run/serialized-value-schema.js +76 -0
  202. package/run/serialized-value-schema.js.map +1 -0
  203. package/run/simulation-witness.js +38 -0
  204. package/run/simulation-witness.js.map +1 -0
  205. package/run/supervised-child-failure.js +26 -0
  206. package/run/supervised-child-failure.js.map +1 -0
  207. package/run/supervised-child-process.d.ts +3 -0
  208. package/run/supervised-child-process.d.ts.map +1 -1
  209. package/run/supervised-child-process.js +2 -0
  210. package/run/supervised-child-process.js.map +1 -1
  211. package/run/supervised-child-transport.js +125 -0
  212. package/run/supervised-child-transport.js.map +1 -0
  213. package/run/supervised-child.entry-point.js +38 -33
  214. package/run/supervised-child.entry-point.js.map +1 -1
  215. package/run/supervised-child.js +13 -11
  216. package/run/supervised-child.js.map +1 -1
  217. package/run/supervised-protocol-schema.js +42 -0
  218. package/run/supervised-protocol-schema.js.map +1 -0
  219. package/run/supervised-protocol.js.map +1 -1
  220. package/run/supervised-run-collection.js +33 -30
  221. package/run/supervised-run-collection.js.map +1 -1
  222. package/run/supervised-run-runtime.js +36 -12
  223. package/run/supervised-run-runtime.js.map +1 -1
  224. package/run/supervised-run-state.js +43 -22
  225. package/run/supervised-run-state.js.map +1 -1
  226. package/run/supervised-run.js +80 -39
  227. package/run/supervised-run.js.map +1 -1
  228. package/run/worker-pool-command.js +1 -0
  229. package/run/worker-pool-command.js.map +1 -1
  230. package/run/worker-pool-execution.js +12 -5
  231. package/run/worker-pool-execution.js.map +1 -1
  232. package/run/worker-pool-hedged-arbitration.js +7 -2
  233. package/run/worker-pool-hedged-arbitration.js.map +1 -1
  234. package/run/worker-pool-host-process.js +50 -20
  235. package/run/worker-pool-host-process.js.map +1 -1
  236. package/run/worker-pool-host-protocol-schema.js +80 -0
  237. package/run/worker-pool-host-protocol-schema.js.map +1 -0
  238. package/run/worker-pool-host-protocol.js.map +1 -1
  239. package/run/worker-pool-host-task.js +20 -11
  240. package/run/worker-pool-host-task.js.map +1 -1
  241. package/run/worker-pool-host-transport.js +96 -0
  242. package/run/worker-pool-host-transport.js.map +1 -0
  243. package/run/worker-pool-host.entry-point.js +37 -5
  244. package/run/worker-pool-host.entry-point.js.map +1 -1
  245. package/run/worker-pool-protocol.js +3 -0
  246. package/run/worker-pool-protocol.js.map +1 -1
  247. package/run/worker-pool-resource-lifecycle-execution.js +66 -1
  248. package/run/worker-pool-resource-lifecycle-execution.js.map +1 -1
  249. package/run/worker-pool-routing.js +2 -1
  250. package/run/worker-pool-routing.js.map +1 -1
  251. package/run/worker-pool-run.js +8 -1
  252. package/run/worker-pool-run.js.map +1 -1
  253. package/run/worker-pool-runtime.js +3 -7
  254. package/run/worker-pool-runtime.js.map +1 -1
  255. package/run/worker-pool-task-events.js +20 -14
  256. package/run/worker-pool-task-events.js.map +1 -1
  257. package/run/worker-pool-task-schema.js +61 -0
  258. package/run/worker-pool-task-schema.js.map +1 -0
  259. package/run/worker-pool-task-validation.js +1 -0
  260. package/run/worker-pool-task-validation.js.map +1 -1
  261. package/run/worker-pool-worker-resources.js +68 -0
  262. package/run/worker-pool-worker-resources.js.map +1 -1
  263. package/run/worker-pool-worker.js +25 -8
  264. package/run/worker-pool-worker.js.map +1 -1
  265. package/sbom.cdx.json +5 -5
  266. package/stored-value.js +12 -0
  267. package/stored-value.js.map +1 -0
  268. package/transcript/http-transcript-artifact.js +2 -0
  269. package/transcript/http-transcript-artifact.js.map +1 -0
  270. package/transcript/transcript-store.d.ts +1 -1
  271. package/transcript/transcript-store.d.ts.map +1 -1
  272. package/transcript/transcript-store.js +29 -3
  273. package/transcript/transcript-store.js.map +1 -1
  274. package/run/node-process-capability-restrictions.js +0 -92
  275. package/run/node-process-capability-restrictions.js.map +0 -1
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod/v4';
2
+ import { diffPathSchema, diffSchema } from "./diff-schema.js";
3
+ import { serializedValueSchema } from "./serialized-value-schema.js";
4
+ import { runArtifactIdSchema } from "./run-artifact-id-schema.js";
5
+ import { sourceLocationsSchema } from "./run-identity-schema.js";
6
+ const thrownErrorSchema = z.strictObject({
7
+ message: z.string(),
8
+ name: z.string(),
9
+ stack: z.string().nullable(),
10
+ thrown: z.unknown()
11
+ });
12
+ const failedCheckSchema = z.lazy(function () {
13
+ const base = {
14
+ actual: serializedValueSchema,
15
+ expected: serializedValueSchema,
16
+ diff: diffSchema.nullable(),
17
+ id: z.string(),
18
+ path: diffPathSchema,
19
+ source: z.enum(['assert', 'require']),
20
+ sourceLocations: sourceLocationsSchema,
21
+ summary: z.string()
22
+ };
23
+ return z.discriminatedUnion('kind', [
24
+ z.strictObject({ ...base, kind: z.literal('leaf') }),
25
+ z.strictObject({
26
+ ...base,
27
+ kind: z.literal('composite'),
28
+ children: z.tuple([failedCheckSchema]).rest(failedCheckSchema)
29
+ }),
30
+ z.strictObject({ ...base, kind: z.literal('foreign'), error: thrownErrorSchema, label: z.string() })
31
+ ]);
32
+ });
33
+ const failureSchema = z.discriminatedUnion('kind', [
34
+ z.strictObject({ kind: z.literal('assertion'), checks: z.tuple([failedCheckSchema]).rest(failedCheckSchema) }),
35
+ z.strictObject({ kind: z.literal('body-error'), error: thrownErrorSchema }),
36
+ z.strictObject({ kind: z.literal('cleanup-error'), error: thrownErrorSchema }),
37
+ z.strictObject({
38
+ kind: z.literal('hedged-duplicate-conflict'),
39
+ artifact: runArtifactIdSchema,
40
+ summary: z.string()
41
+ }),
42
+ z.strictObject({ kind: z.literal('timeout'), deadlineMilliseconds: z.number(), elapsedMilliseconds: z.number() }),
43
+ z.strictObject({
44
+ kind: z.literal('test-contract'),
45
+ actual: z.unknown(),
46
+ code: z.enum([
47
+ 'dead-builder-assertion',
48
+ 'invalid-assertion-reference',
49
+ 'invalid-composite-result',
50
+ 'invalid-deep-assertion-operand',
51
+ 'invalid-plan',
52
+ 'invalid-timeout-control',
53
+ 'invalid-require-reference',
54
+ 'no-assertions',
55
+ 'pending-in-flight-task',
56
+ 'pending-async-assertion',
57
+ 'plan-mismatch',
58
+ 'unobserved-in-flight-task'
59
+ ]),
60
+ expected: z.string(),
61
+ summary: z.string()
62
+ })
63
+ ]);
64
+ export const testOutcomeSchema = z.discriminatedUnion('kind', [
65
+ z.strictObject({ kind: z.literal('pass') }),
66
+ z.strictObject({ kind: z.enum(['skip', 'inconclusive']), reason: z.string() }),
67
+ z.strictObject({ kind: z.literal('fail'), failures: z.tuple([failureSchema]).rest(failureSchema) })
68
+ ]);
69
+ //# sourceMappingURL=assertion-result-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-result-schema.js","sourceRoot":"","sources":["../../../../source/run/assertion-result-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;CACtB,CAAC,CAAC;AACH,MAAM,iBAAiB,GAA2B,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG;QACT,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,qBAAqB;QAC/B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAE,QAAQ,EAAE,SAAS,CAAE,CAAC;QACvC,eAAe,EAAE,qBAAqB;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,OAAO,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QAChC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,CAAC,CAAC,YAAY,CAAC;YACX,GAAG,IAAI;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;YAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAE,iBAAiB,CAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;SACnE,CAAC;QACF,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;KACvG,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/C,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAE,iBAAiB,CAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAChH,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3E,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC9E,CAAC,CAAC,YAAY,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;QAC5C,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACjH,CAAC,CAAC,YAAY,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACT,wBAAwB;YACxB,6BAA6B;YAC7B,0BAA0B;YAC1B,gCAAgC;YAChC,cAAc;YACd,yBAAyB;YACzB,2BAA2B;YAC3B,eAAe;YACf,wBAAwB;YACxB,yBAAyB;YACzB,eAAe;YACf,2BAA2B;SAC9B,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;CACL,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAClF,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3C,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAE,MAAM,EAAE,cAAc,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAChF,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAE,aAAa,CAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;CACxG,CAAC,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { connect } from 'node:net';
2
+ import { createInterface } from 'node:readline';
3
+ import { createStoredRunValue } from "./supervised-run-state.js";
4
+ import { attachmentMaxFrameBytes, attachmentMaxPendingRequests } from "./attachment-protocol.js";
5
+ import { attachmentReplySchema } from "./attachment-wire-schema.js";
6
+ import { boundedAttachmentFrames } from "./attachment-frames.js";
7
+ const jsonEscapeExpansion = 6;
8
+ function attachmentChannelFail(state, error) {
9
+ const { failure, pending } = state;
10
+ failure.write(error);
11
+ for (const request of pending.values()) {
12
+ request.reject(error);
13
+ }
14
+ pending.clear();
15
+ }
16
+ function attachmentChannelReply(state, line) {
17
+ const { pending, socket } = state;
18
+ const value = JSON.parse(line);
19
+ const reply = attachmentReplySchema.parse(value);
20
+ pending.get(reply.request)?.resolve(reply.result);
21
+ pending.delete(reply.request);
22
+ if (pending.size === 0) {
23
+ socket.unref();
24
+ }
25
+ }
26
+ function attachmentChannelReceive(state, line) {
27
+ const { socket } = state;
28
+ try {
29
+ attachmentChannelReply(state, line);
30
+ }
31
+ catch (error) {
32
+ attachmentChannelFail(state, error instanceof Error ? error : new Error('Invalid attachment reply.'));
33
+ socket.destroy();
34
+ }
35
+ }
36
+ function attachmentChannelObserve(state) {
37
+ const { endpoint, socket } = state;
38
+ const frames = boundedAttachmentFrames(endpoint.limits.maxInlineBytes * jsonEscapeExpansion + attachmentMaxFrameBytes);
39
+ const lines = createInterface({ input: socket.pipe(frames), crlfDelay: Number.POSITIVE_INFINITY });
40
+ frames.on('error', function (error) {
41
+ attachmentChannelFail(state, error);
42
+ socket.destroy();
43
+ });
44
+ lines.on('error', function (error) {
45
+ attachmentChannelFail(state, error);
46
+ socket.destroy();
47
+ });
48
+ socket.on('error', function (error) {
49
+ attachmentChannelFail(state, error);
50
+ });
51
+ socket.on('close', function () {
52
+ attachmentChannelFail(state, new Error('Attachment execution boundary disconnected.'));
53
+ lines.close();
54
+ });
55
+ lines.on('line', function (line) {
56
+ attachmentChannelReceive(state, line);
57
+ });
58
+ }
59
+ function attachmentChannelClose(state) {
60
+ const { socket } = state;
61
+ socket.end();
62
+ }
63
+ async function sendAttachmentRequest(state, operation) {
64
+ const { sequence, pending, socket, endpoint } = state;
65
+ if (pending.size >= attachmentMaxPendingRequests) {
66
+ throw new Error('Attachment transport request limit exceeded.');
67
+ }
68
+ const request = sequence.read();
69
+ sequence.write(request + 1);
70
+ const response = Promise.withResolvers();
71
+ pending.set(request, response);
72
+ socket.ref();
73
+ socket.write(`${JSON.stringify({ request, token: endpoint.token, operation })}\n`);
74
+ return response.promise;
75
+ }
76
+ async function attachmentChannelExchange(state, operation) {
77
+ await state.ready;
78
+ const unavailable = state.failure.read();
79
+ if (unavailable !== null) {
80
+ throw unavailable;
81
+ }
82
+ return await sendAttachmentRequest(state, operation);
83
+ }
84
+ function observeAttachmentDisconnect(state, observer) {
85
+ state.socket.once('close', observer);
86
+ }
87
+ export function createAttachmentConnection(endpoint) {
88
+ const socket = connect({ host: '127.0.0.1', port: endpoint.port });
89
+ const pending = new Map();
90
+ const sequence = createStoredRunValue(0);
91
+ const failure = createStoredRunValue(null);
92
+ const ready = new Promise(function (resolve, reject) {
93
+ socket.once('connect', function () {
94
+ socket.unref();
95
+ resolve();
96
+ });
97
+ socket.once('error', reject);
98
+ });
99
+ const state = { endpoint, socket, pending, sequence, failure, ready };
100
+ attachmentChannelObserve(state);
101
+ return {
102
+ ready: state.ready,
103
+ observeDisconnect: observeAttachmentDisconnect.bind(null, state),
104
+ close: attachmentChannelClose.bind(null, state),
105
+ exchange: attachmentChannelExchange.bind(null, state)
106
+ };
107
+ }
108
+ //# sourceMappingURL=attachment-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-connection.js","sourceRoot":"","sources":["../../../../source/run/attachment-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const coordinatorContext = new AsyncLocalStorage();
3
+ export function currentAttachmentCoordinator() {
4
+ return coordinatorContext.getStore() ?? null;
5
+ }
6
+ export async function runWithAttachmentCoordinator(coordinator, run) {
7
+ return await coordinatorContext.run(coordinator, run);
8
+ }
9
+ //# sourceMappingURL=attachment-coordinator-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-coordinator-context.js","sourceRoot":"","sources":["../../../../source/run/attachment-coordinator-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAwBrD,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAyB,CAAC;AAE1E,MAAM,UAAU,4BAA4B;IACxC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAC9C,WAAkC,EAClC,GAAyB;IAEzB,OAAO,MAAM,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { createStoredRunValue } from "./supervised-run-state.js";
3
+ import { attachmentArtifacts, attachmentMatchesAttempt, resultWithRuntimeAttachments } from "./attachment-results.js";
4
+ import { createAttachmentExecution } from "./attachment-execution.js";
5
+ function attachmentRunCoordinatorBranchEndpoint(state, branch, retain) {
6
+ const { branches, store } = state;
7
+ const id = branches.get(branch) ?? randomUUID();
8
+ branches.set(branch, id);
9
+ store.registerBranch(id, retain);
10
+ return { ...state.endpoint, branch: id };
11
+ }
12
+ function attachmentRunCoordinatorBranchArtifacts(state, branch) {
13
+ const { branches, store } = state;
14
+ const id = branches.get(branch);
15
+ return id === undefined ? [] : store.conflictArtifacts(id);
16
+ }
17
+ function attachmentRunCoordinatorCaseArtifacts(state, work, attempt, branch) {
18
+ const { store } = state;
19
+ const artifacts = branch === null
20
+ ? store.branchArtifacts(null)
21
+ : store.branchArtifacts(state.branches.get(branch) ?? null);
22
+ return artifacts.filter(function belongsToAttempt(artifact) {
23
+ return attachmentMatchesAttempt(artifact, work, attempt);
24
+ });
25
+ }
26
+ async function attachmentRunCoordinatorFinalize(state, result) {
27
+ const { finalized, execution, server, store, resolved } = state;
28
+ if (finalized.read() !== null) {
29
+ return result;
30
+ }
31
+ const localErrors = await execution.finish();
32
+ store.settleResult(result);
33
+ const owners = await server.finish();
34
+ const final = resultWithRuntimeAttachments(result, store.selectedArtifacts(), {
35
+ localErrors,
36
+ owners,
37
+ policy: resolved.facts.execution.retries?.artifacts ?? 'first-failure-and-final',
38
+ retainsBranch: store.retainsBranch
39
+ });
40
+ finalized.write(final);
41
+ await store.prune(attachmentArtifacts(final.artifacts));
42
+ return final;
43
+ }
44
+ async function attachmentRunCoordinatorClose(state) {
45
+ const { execution, server } = state;
46
+ await execution.finish();
47
+ await server.finish();
48
+ }
49
+ export function createAttachmentRunCoordinator(storage) {
50
+ const { store, server, resolved } = storage;
51
+ const branches = new WeakMap();
52
+ const execution = createAttachmentExecution(async function (operation) {
53
+ return store.exchange('local', operation);
54
+ }, server.endpoint.limits);
55
+ const endpoint = server.endpoint;
56
+ const finalized = createStoredRunValue(null);
57
+ const state = {
58
+ storage,
59
+ store,
60
+ server,
61
+ resolved,
62
+ branches,
63
+ execution,
64
+ endpoint,
65
+ finalized
66
+ };
67
+ return {
68
+ settleAttempt(work, attempt, verdict, branch) {
69
+ store.settleAttempt(work, attempt, verdict, branch === null ? null : branches.get(branch) ?? null);
70
+ },
71
+ artifacts: store.selectedArtifacts,
72
+ execution: state.execution,
73
+ endpoint: state.endpoint,
74
+ branchEndpoint: attachmentRunCoordinatorBranchEndpoint.bind(null, state),
75
+ branchArtifacts: attachmentRunCoordinatorBranchArtifacts.bind(null, state),
76
+ caseArtifacts: attachmentRunCoordinatorCaseArtifacts.bind(null, state),
77
+ finalize: attachmentRunCoordinatorFinalize.bind(null, state),
78
+ close: attachmentRunCoordinatorClose.bind(null, state)
79
+ };
80
+ }
81
+ //# sourceMappingURL=attachment-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-coordinator.js","sourceRoot":"","sources":["../../../../source/run/attachment-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { workIdentityKey } from "../engine/identity.js";
2
+ import { collectedRunCaseEntries } from "./collected-run-plan.js";
3
+ export function runHasAttachmentScopes(resolved) {
4
+ if (resolved.facts.execution.testFamily !== 'integration' || resolved.facts.cases.length === 0) {
5
+ return false;
6
+ }
7
+ const selected = new Set(resolved.facts.cases.map(function selectedWork(entry) {
8
+ return workIdentityKey(entry.workId);
9
+ }));
10
+ const cases = resolved.plan.kind === 'local'
11
+ ? resolved.plan.testPlan.cases.map(function localCase(testCase) {
12
+ return { testCase, workId: testCase.workId };
13
+ })
14
+ : collectedRunCaseEntries(resolved.plan.collectedPlan);
15
+ return cases.some(function hasAttachmentScope(entry) {
16
+ return selected.has(workIdentityKey(entry.workId)) &&
17
+ (entry.testCase.resourceAttachments.resourceGraph.length > 0 ||
18
+ entry.testCase.resourceAttachments.runtimeGraphs.length > 0);
19
+ });
20
+ }
21
+ //# sourceMappingURL=attachment-eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-eligibility.js","sourceRoot":"","sources":["../../../../source/run/attachment-eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,UAAU,sBAAsB,CAAC,QAAqB;IACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK;QACzE,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;QACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,QAAQ;YAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjD,CAAC,CAAC;QACF,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,kBAAkB,CAAC,KAAK;QAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBACxD,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,302 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { workIdentityKey } from "../engine/identity.js";
3
+ import { AttachmentOperationError, createAttachmentFailure } from "./attachment-failure.js";
4
+ import { createStoredRunValue } from "./supervised-run-state.js";
5
+ import { snapshotAttachmentJson } from "./attachment-json.js";
6
+ import { createAttachmentStream, copyAttachmentFile } from "./attachment-writer.js";
7
+ function createAttachmentAttempt(work, attempt) {
8
+ const owner = { attempt, kind: 'case', work };
9
+ const active = createStoredRunValue(true);
10
+ function end() {
11
+ active.write(false);
12
+ }
13
+ function isActive() {
14
+ return active.read();
15
+ }
16
+ return { owner, end, isActive };
17
+ }
18
+ function ownerKey(owner) {
19
+ return owner.kind === 'run' ? 'run' : `${workIdentityKey(owner.work)}:${owner.attempt.index}`;
20
+ }
21
+ const maxFailuresPerOwner = 100;
22
+ function attachmentExecutionSessionFail(state, rejection) {
23
+ const { owner, drift } = rejection;
24
+ const { failures } = state;
25
+ const error = createAttachmentFailure(rejection, state.currentBranch.getStore() ?? null);
26
+ const key = ownerKey(drift ? { kind: 'run' } : owner);
27
+ const errors = failures.get(key) ?? [];
28
+ if (errors.length < maxFailuresPerOwner) {
29
+ state.failures.set(key, [...errors, error]);
30
+ }
31
+ return error;
32
+ }
33
+ function attachmentExecutionSessionVerify(state, window) {
34
+ if (state.closed.read()) {
35
+ throw attachmentExecutionSessionFail(state, {
36
+ owner: window?.owner ?? { kind: 'run' },
37
+ message: 'Attachment escaped its integration run.',
38
+ reason: 'expired-run',
39
+ drift: true
40
+ });
41
+ }
42
+ if (window?.isActive() === false) {
43
+ throw attachmentExecutionSessionFail(state, {
44
+ owner: window.owner,
45
+ message: 'Attachment escaped its test attempt.',
46
+ reason: 'expired-attempt',
47
+ drift: true
48
+ });
49
+ }
50
+ }
51
+ async function attachmentExecutionSessionTransport(state, operation, owner) {
52
+ try {
53
+ return await state.exchange(operation);
54
+ }
55
+ catch (error) {
56
+ throw attachmentExecutionSessionFail(state, {
57
+ owner,
58
+ message: error instanceof Error ? error.message : 'Attachment transport failed.',
59
+ reason: 'transport',
60
+ drift: false
61
+ });
62
+ }
63
+ }
64
+ async function attachmentExecutionSessionSend(state, operation, owner) {
65
+ const response = await attachmentExecutionSessionTransport(state, operation, owner);
66
+ if (response.kind === 'error') {
67
+ throw attachmentExecutionSessionFail(state, {
68
+ owner,
69
+ message: response.message,
70
+ reason: response.reason,
71
+ drift: false
72
+ });
73
+ }
74
+ return response;
75
+ }
76
+ function preparedAttemptWindow(state, condition) {
77
+ const window = state.attempts.get(ownerKey({ kind: 'case', work: condition.work, attempt: condition.attempt }));
78
+ if (window === undefined) {
79
+ throw attachmentExecutionSessionFail(state, {
80
+ owner: { kind: 'case', work: condition.work, attempt: condition.attempt },
81
+ message: 'Failure artifact escaped its test attempt.',
82
+ reason: 'expired-attempt',
83
+ drift: true
84
+ });
85
+ }
86
+ attachmentExecutionSessionVerify(state, window);
87
+ return window;
88
+ }
89
+ function activeAttachmentWindow(state) {
90
+ const condition = state.preparation?.condition;
91
+ if (condition?.kind === 'attempt') {
92
+ return preparedAttemptWindow(state, condition);
93
+ }
94
+ const window = condition?.kind === 'resource' ? undefined : state.currentAttempt.getStore();
95
+ attachmentExecutionSessionVerify(state, window);
96
+ return window;
97
+ }
98
+ async function attachmentExecutionSessionOpen(state, metadata, kind, producer) {
99
+ const { currentBranch, writers } = state;
100
+ const window = activeAttachmentWindow(state);
101
+ const owner = window?.owner ?? { kind: 'run' };
102
+ const response = await attachmentExecutionSessionSend(state, {
103
+ branch: currentBranch.getStore() ?? null,
104
+ contentKind: kind,
105
+ ...state.preparation === null
106
+ ? { kind: 'open' }
107
+ : { kind: 'prepare', ...state.preparation },
108
+ metadata,
109
+ owner,
110
+ producer
111
+ }, owner);
112
+ if (response.kind !== 'opened') {
113
+ throw attachmentExecutionSessionFail(state, {
114
+ owner,
115
+ message: 'Attachment open returned an invalid reply.',
116
+ reason: 'protocol',
117
+ drift: false
118
+ });
119
+ }
120
+ const token = Symbol('attachment-writer');
121
+ const writer = createAttachmentStream({
122
+ fail(message, reason) {
123
+ return attachmentExecutionSessionFail(state, {
124
+ owner,
125
+ message,
126
+ reason,
127
+ drift: false
128
+ });
129
+ },
130
+ owner,
131
+ release() {
132
+ writers.delete(token);
133
+ },
134
+ async send(operation) {
135
+ return attachmentExecutionSessionSend(state, operation, owner);
136
+ },
137
+ verify() {
138
+ attachmentExecutionSessionVerify(state, window);
139
+ }
140
+ }, response.writer, kind);
141
+ writers.set(token, writer);
142
+ return writer;
143
+ }
144
+ function attachmentJsonLimit(state) {
145
+ return state.preparation?.subtype === 'witness' ? state.maxArtifactBytes : state.maxInlineBytes;
146
+ }
147
+ function attachmentExecutionSessionJsonSnapshot(state, value) {
148
+ const { currentAttempt } = state;
149
+ const limit = attachmentJsonLimit(state);
150
+ try {
151
+ return snapshotAttachmentJson(value, limit);
152
+ }
153
+ catch (error) {
154
+ const owner = currentAttempt.getStore()?.owner ?? { kind: 'run' };
155
+ throw attachmentExecutionSessionFail(state, {
156
+ owner,
157
+ message: error instanceof Error ? error.message : 'Invalid JSON attachment.',
158
+ reason: 'invalid-json',
159
+ drift: false
160
+ });
161
+ }
162
+ }
163
+ async function attachmentExecutionSessionJson(state, metadata, value, producer) {
164
+ activeAttachmentWindow(state);
165
+ const snapshot = attachmentExecutionSessionJsonSnapshot(state, value);
166
+ const writer = await attachmentExecutionSessionOpen(state, metadata, 'json', producer);
167
+ if (snapshot === null) {
168
+ await writer.omit();
169
+ }
170
+ else {
171
+ await writer.write(snapshot.encoded);
172
+ }
173
+ return await writer.close();
174
+ }
175
+ async function attachmentExecutionSessionFile(state, metadata, filePath, producer) {
176
+ const writer = await attachmentExecutionSessionOpen(state, metadata, 'binary', producer);
177
+ try {
178
+ await copyAttachmentFile(writer, filePath);
179
+ }
180
+ catch (error) {
181
+ await writer.finish('write-error');
182
+ if (error instanceof AttachmentOperationError) {
183
+ throw error;
184
+ }
185
+ throw attachmentExecutionSessionFail(state, {
186
+ owner: writer.owner,
187
+ message: error instanceof Error ? error.message : 'Attachment file read failed.',
188
+ reason: 'file-read',
189
+ drift: false
190
+ });
191
+ }
192
+ return await writer.close();
193
+ }
194
+ function attachmentExecutionSessionCapabilities(state, producer) {
195
+ return {
196
+ async file(metadata, filePath) {
197
+ return attachmentExecutionSessionFile(state, metadata, filePath, producer);
198
+ },
199
+ async json(metadata, value) {
200
+ return attachmentExecutionSessionJson(state, metadata, value, producer);
201
+ },
202
+ async open(metadata) {
203
+ return attachmentExecutionSessionOpen(state, metadata, metadata.kind, producer);
204
+ }
205
+ };
206
+ }
207
+ async function attachmentExecutionSessionFinishOwner(state, owner) {
208
+ const { writers } = state;
209
+ const selected = Array.from(writers.values()).filter(function ownedWriter(writer) {
210
+ return ownerKey(writer.owner) === ownerKey(owner);
211
+ });
212
+ await Promise.allSettled(selected.map(async function finishOwnedWriter(writer) {
213
+ await writer.finish('unclosed');
214
+ }));
215
+ }
216
+ function attachmentExecutionSessionTakeErrors(state, owner) {
217
+ const { failures } = state;
218
+ const key = ownerKey(owner);
219
+ const errors = failures.get(key) ?? [];
220
+ failures.delete(key);
221
+ return errors.flatMap(function unreportedError(error) {
222
+ const failure = error.take();
223
+ return failure === null ? [] : [failure];
224
+ });
225
+ }
226
+ async function attachmentExecutionSessionFinish(state) {
227
+ state.closed.write(true);
228
+ await attachmentExecutionSessionFinishOwner(state, { kind: 'run' });
229
+ return attachmentExecutionSessionTakeErrors(state, { kind: 'run' });
230
+ }
231
+ async function attachmentExecutionSessionOwnedAttempt(state, window, run) {
232
+ try {
233
+ return await run();
234
+ }
235
+ finally {
236
+ window.end();
237
+ await attachmentExecutionSessionFinishOwner(state, window.owner);
238
+ }
239
+ }
240
+ async function attachmentExecutionSessionRunAttempt(state, work, attempt, run) {
241
+ const { currentAttempt } = state;
242
+ const existing = currentAttempt.getStore();
243
+ if (existing?.isActive() === true && ownerKey(existing.owner) === ownerKey({ kind: 'case', work, attempt })) {
244
+ return await run();
245
+ }
246
+ const window = createAttachmentAttempt(work, attempt);
247
+ state.attempts.set(ownerKey(window.owner), window);
248
+ return await currentAttempt.run(window, async function () {
249
+ return attachmentExecutionSessionOwnedAttempt(state, window, run);
250
+ });
251
+ }
252
+ async function attachmentExecutionSessionRunBranch(state, branch, run) {
253
+ const { currentBranch } = state;
254
+ return await currentBranch.run(branch, run);
255
+ }
256
+ export function createAttachmentExecution(exchange, limits) {
257
+ const currentAttempt = new AsyncLocalStorage();
258
+ const currentBranch = new AsyncLocalStorage();
259
+ const writers = new Map();
260
+ const failures = new Map();
261
+ const state = {
262
+ closed: createStoredRunValue(false),
263
+ exchange,
264
+ maxInlineBytes: limits.maxInlineBytes,
265
+ maxArtifactBytes: limits.maxArtifactBytes,
266
+ preparation: null,
267
+ attempts: new Map(),
268
+ currentAttempt,
269
+ currentBranch,
270
+ writers,
271
+ failures
272
+ };
273
+ const context = {
274
+ limits,
275
+ forProducer: attachmentExecutionSessionCapabilities.bind(null, state),
276
+ prepareForProducer(producer, condition, source, subtype) {
277
+ return attachmentExecutionSessionCapabilities({ ...state, preparation: { condition, source, subtype } }, producer);
278
+ }
279
+ };
280
+ return {
281
+ context,
282
+ async markResourceFailure(boundary) {
283
+ await attachmentExecutionSessionSend(state, { kind: 'resource-failure', boundary }, { kind: 'run' });
284
+ },
285
+ async registerResourceConsumers(boundary, consumers) {
286
+ for (const work of consumers) {
287
+ await attachmentExecutionSessionSend(state, { kind: 'resource-consumer', boundary, work }, {
288
+ kind: 'run'
289
+ });
290
+ }
291
+ },
292
+ takeErrors: attachmentExecutionSessionTakeErrors.bind(null, state),
293
+ finish: attachmentExecutionSessionFinish.bind(null, state),
294
+ async runAttempt(work, attempt, run) {
295
+ return await attachmentExecutionSessionRunAttempt(state, work, attempt, run);
296
+ },
297
+ async runBranch(branch, run) {
298
+ return await attachmentExecutionSessionRunBranch(state, branch, run);
299
+ }
300
+ };
301
+ }
302
+ //# sourceMappingURL=attachment-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-execution.js","sourceRoot":"","sources":["../../../../source/run/attachment-execution.ts"],"names":[],"mappings":"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"}