@e2edev/e2e 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/agent/act-validation.d.ts +27 -0
  4. package/dist/agent/act-validation.d.ts.map +1 -0
  5. package/dist/agent/act-validation.js +121 -0
  6. package/dist/agent/act-validation.js.map +1 -0
  7. package/dist/agent/act.d.ts +27 -0
  8. package/dist/agent/act.d.ts.map +1 -0
  9. package/dist/agent/act.js +775 -0
  10. package/dist/agent/act.js.map +1 -0
  11. package/dist/agent/actions.d.ts +66 -0
  12. package/dist/agent/actions.d.ts.map +1 -0
  13. package/dist/agent/actions.js +82 -0
  14. package/dist/agent/actions.js.map +1 -0
  15. package/dist/agent/ai-sdk.d.ts +16 -0
  16. package/dist/agent/ai-sdk.d.ts.map +1 -0
  17. package/dist/agent/ai-sdk.js +59 -0
  18. package/dist/agent/ai-sdk.js.map +1 -0
  19. package/dist/agent/call-options.d.ts +10 -0
  20. package/dist/agent/call-options.d.ts.map +1 -0
  21. package/dist/agent/call-options.js +28 -0
  22. package/dist/agent/call-options.js.map +1 -0
  23. package/dist/agent/default-agent.d.ts +22 -0
  24. package/dist/agent/default-agent.d.ts.map +1 -0
  25. package/dist/agent/default-agent.js +354 -0
  26. package/dist/agent/default-agent.js.map +1 -0
  27. package/dist/agent/error.d.ts +53 -0
  28. package/dist/agent/error.d.ts.map +1 -0
  29. package/dist/agent/error.js +94 -0
  30. package/dist/agent/error.js.map +1 -0
  31. package/dist/agent/executor.d.ts +238 -0
  32. package/dist/agent/executor.d.ts.map +1 -0
  33. package/dist/agent/executor.js +56 -0
  34. package/dist/agent/executor.js.map +1 -0
  35. package/dist/agent/index.d.ts +15 -0
  36. package/dist/agent/index.d.ts.map +1 -0
  37. package/dist/agent/index.js +304 -0
  38. package/dist/agent/index.js.map +1 -0
  39. package/dist/agent/invocation.d.ts +194 -0
  40. package/dist/agent/invocation.d.ts.map +1 -0
  41. package/dist/agent/invocation.js +389 -0
  42. package/dist/agent/invocation.js.map +1 -0
  43. package/dist/agent/ledger.d.ts +24 -0
  44. package/dist/agent/ledger.d.ts.map +1 -0
  45. package/dist/agent/ledger.js +48 -0
  46. package/dist/agent/ledger.js.map +1 -0
  47. package/dist/agent/loop-guards.d.ts +35 -0
  48. package/dist/agent/loop-guards.d.ts.map +1 -0
  49. package/dist/agent/loop-guards.js +110 -0
  50. package/dist/agent/loop-guards.js.map +1 -0
  51. package/dist/agent/model/adapter.d.ts +97 -0
  52. package/dist/agent/model/adapter.d.ts.map +1 -0
  53. package/dist/agent/model/adapter.js +40 -0
  54. package/dist/agent/model/adapter.js.map +1 -0
  55. package/dist/agent/model/router.d.ts +36 -0
  56. package/dist/agent/model/router.d.ts.map +1 -0
  57. package/dist/agent/model/router.js +45 -0
  58. package/dist/agent/model/router.js.map +1 -0
  59. package/dist/agent/model/schema.d.ts +16 -0
  60. package/dist/agent/model/schema.d.ts.map +1 -0
  61. package/dist/agent/model/schema.js +37 -0
  62. package/dist/agent/model/schema.js.map +1 -0
  63. package/dist/agent/model/sdk.d.ts +28 -0
  64. package/dist/agent/model/sdk.d.ts.map +1 -0
  65. package/dist/agent/model/sdk.js +258 -0
  66. package/dist/agent/model/sdk.js.map +1 -0
  67. package/dist/agent/observation.d.ts +70 -0
  68. package/dist/agent/observation.d.ts.map +1 -0
  69. package/dist/agent/observation.js +174 -0
  70. package/dist/agent/observation.js.map +1 -0
  71. package/dist/agent/phases.d.ts +71 -0
  72. package/dist/agent/phases.d.ts.map +1 -0
  73. package/dist/agent/phases.js +124 -0
  74. package/dist/agent/phases.js.map +1 -0
  75. package/dist/agent/prompts.d.ts +40 -0
  76. package/dist/agent/prompts.d.ts.map +1 -0
  77. package/dist/agent/prompts.js +104 -0
  78. package/dist/agent/prompts.js.map +1 -0
  79. package/dist/agent/protocol.d.ts +31 -0
  80. package/dist/agent/protocol.d.ts.map +1 -0
  81. package/dist/agent/protocol.js +67 -0
  82. package/dist/agent/protocol.js.map +1 -0
  83. package/dist/agent/public.d.ts +12 -0
  84. package/dist/agent/public.d.ts.map +1 -0
  85. package/dist/agent/public.js +12 -0
  86. package/dist/agent/public.js.map +1 -0
  87. package/dist/agent/replay.d.ts +61 -0
  88. package/dist/agent/replay.d.ts.map +1 -0
  89. package/dist/agent/replay.js +185 -0
  90. package/dist/agent/replay.js.map +1 -0
  91. package/dist/agent/secrets.d.ts +22 -0
  92. package/dist/agent/secrets.d.ts.map +1 -0
  93. package/dist/agent/secrets.js +63 -0
  94. package/dist/agent/secrets.js.map +1 -0
  95. package/dist/agent/step-cache.d.ts +156 -0
  96. package/dist/agent/step-cache.d.ts.map +1 -0
  97. package/dist/agent/step-cache.js +301 -0
  98. package/dist/agent/step-cache.js.map +1 -0
  99. package/dist/agent/tool-loop.d.ts +51 -0
  100. package/dist/agent/tool-loop.d.ts.map +1 -0
  101. package/dist/agent/tool-loop.js +331 -0
  102. package/dist/agent/tool-loop.js.map +1 -0
  103. package/dist/agent/tool.d.ts +39 -0
  104. package/dist/agent/tool.d.ts.map +1 -0
  105. package/dist/agent/tool.js +52 -0
  106. package/dist/agent/tool.js.map +1 -0
  107. package/dist/backend/contract.d.ts +186 -0
  108. package/dist/backend/contract.d.ts.map +1 -0
  109. package/dist/backend/contract.js +65 -0
  110. package/dist/backend/contract.js.map +1 -0
  111. package/dist/backend/index.d.ts +316 -0
  112. package/dist/backend/index.d.ts.map +1 -0
  113. package/dist/backend/index.js +219 -0
  114. package/dist/backend/index.js.map +1 -0
  115. package/dist/backend/session.d.ts +23 -0
  116. package/dist/backend/session.d.ts.map +1 -0
  117. package/dist/backend/session.js +213 -0
  118. package/dist/backend/session.js.map +1 -0
  119. package/dist/backend/surface.d.ts +83 -0
  120. package/dist/backend/surface.d.ts.map +1 -0
  121. package/dist/backend/surface.js +11 -0
  122. package/dist/backend/surface.js.map +1 -0
  123. package/dist/cache/anchors.d.ts +37 -0
  124. package/dist/cache/anchors.d.ts.map +1 -0
  125. package/dist/cache/anchors.js +89 -0
  126. package/dist/cache/anchors.js.map +1 -0
  127. package/dist/cache/context.d.ts +74 -0
  128. package/dist/cache/context.d.ts.map +1 -0
  129. package/dist/cache/context.js +82 -0
  130. package/dist/cache/context.js.map +1 -0
  131. package/dist/cache/decide.d.ts +42 -0
  132. package/dist/cache/decide.d.ts.map +1 -0
  133. package/dist/cache/decide.js +47 -0
  134. package/dist/cache/decide.js.map +1 -0
  135. package/dist/cache/identity.d.ts +113 -0
  136. package/dist/cache/identity.d.ts.map +1 -0
  137. package/dist/cache/identity.js +109 -0
  138. package/dist/cache/identity.js.map +1 -0
  139. package/dist/cache/recorder.d.ts +76 -0
  140. package/dist/cache/recorder.d.ts.map +1 -0
  141. package/dist/cache/recorder.js +143 -0
  142. package/dist/cache/recorder.js.map +1 -0
  143. package/dist/cache/relocate.d.ts +69 -0
  144. package/dist/cache/relocate.d.ts.map +1 -0
  145. package/dist/cache/relocate.js +125 -0
  146. package/dist/cache/relocate.js.map +1 -0
  147. package/dist/cache/store.d.ts +68 -0
  148. package/dist/cache/store.d.ts.map +1 -0
  149. package/dist/cache/store.js +106 -0
  150. package/dist/cache/store.js.map +1 -0
  151. package/dist/cache/trace.d.ts +146 -0
  152. package/dist/cache/trace.d.ts.map +1 -0
  153. package/dist/cache/trace.js +249 -0
  154. package/dist/cache/trace.js.map +1 -0
  155. package/dist/cli/bin.d.ts +3 -0
  156. package/dist/cli/bin.d.ts.map +1 -0
  157. package/dist/cli/bin.js +4 -0
  158. package/dist/cli/bin.js.map +1 -0
  159. package/dist/cli/index.d.ts +4 -0
  160. package/dist/cli/index.d.ts.map +1 -0
  161. package/dist/cli/index.js +108 -0
  162. package/dist/cli/index.js.map +1 -0
  163. package/dist/cli/init.d.ts +6 -0
  164. package/dist/cli/init.d.ts.map +1 -0
  165. package/dist/cli/init.js +101 -0
  166. package/dist/cli/init.js.map +1 -0
  167. package/dist/collect/collect.d.ts +44 -0
  168. package/dist/collect/collect.d.ts.map +1 -0
  169. package/dist/collect/collect.js +89 -0
  170. package/dist/collect/collect.js.map +1 -0
  171. package/dist/collect/registry.d.ts +47 -0
  172. package/dist/collect/registry.d.ts.map +1 -0
  173. package/dist/collect/registry.js +262 -0
  174. package/dist/collect/registry.js.map +1 -0
  175. package/dist/collect/select.d.ts +54 -0
  176. package/dist/collect/select.d.ts.map +1 -0
  177. package/dist/collect/select.js +230 -0
  178. package/dist/collect/select.js.map +1 -0
  179. package/dist/config/agent.d.ts +91 -0
  180. package/dist/config/agent.d.ts.map +1 -0
  181. package/dist/config/agent.js +232 -0
  182. package/dist/config/agent.js.map +1 -0
  183. package/dist/config/load.d.ts +23 -0
  184. package/dist/config/load.d.ts.map +1 -0
  185. package/dist/config/load.js +75 -0
  186. package/dist/config/load.js.map +1 -0
  187. package/dist/config/resolve.d.ts +94 -0
  188. package/dist/config/resolve.d.ts.map +1 -0
  189. package/dist/config/resolve.js +500 -0
  190. package/dist/config/resolve.js.map +1 -0
  191. package/dist/config/validate.d.ts +6 -0
  192. package/dist/config/validate.d.ts.map +1 -0
  193. package/dist/config/validate.js +21 -0
  194. package/dist/config/validate.js.map +1 -0
  195. package/dist/credentials.d.ts +7 -0
  196. package/dist/credentials.d.ts.map +1 -0
  197. package/dist/credentials.js +42 -0
  198. package/dist/credentials.js.map +1 -0
  199. package/dist/expect/async.d.ts +5 -0
  200. package/dist/expect/async.d.ts.map +1 -0
  201. package/dist/expect/async.js +186 -0
  202. package/dist/expect/async.js.map +1 -0
  203. package/dist/expect/index.d.ts +7 -0
  204. package/dist/expect/index.d.ts.map +1 -0
  205. package/dist/expect/index.js +23 -0
  206. package/dist/expect/index.js.map +1 -0
  207. package/dist/expect/values.d.ts +4 -0
  208. package/dist/expect/values.d.ts.map +1 -0
  209. package/dist/expect/values.js +108 -0
  210. package/dist/expect/values.js.map +1 -0
  211. package/dist/index.d.ts +13 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +15 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/internal/ai-trace.d.ts +151 -0
  216. package/dist/internal/ai-trace.d.ts.map +1 -0
  217. package/dist/internal/ai-trace.js +360 -0
  218. package/dist/internal/ai-trace.js.map +1 -0
  219. package/dist/internal/brands.d.ts +9 -0
  220. package/dist/internal/brands.d.ts.map +1 -0
  221. package/dist/internal/brands.js +9 -0
  222. package/dist/internal/brands.js.map +1 -0
  223. package/dist/internal/debug.d.ts +43 -0
  224. package/dist/internal/debug.d.ts.map +1 -0
  225. package/dist/internal/debug.js +102 -0
  226. package/dist/internal/debug.js.map +1 -0
  227. package/dist/internal/errors.d.ts +98 -0
  228. package/dist/internal/errors.d.ts.map +1 -0
  229. package/dist/internal/errors.js +212 -0
  230. package/dist/internal/errors.js.map +1 -0
  231. package/dist/internal/globs.d.ts +29 -0
  232. package/dist/internal/globs.d.ts.map +1 -0
  233. package/dist/internal/globs.js +126 -0
  234. package/dist/internal/globs.js.map +1 -0
  235. package/dist/internal/ids.d.ts +32 -0
  236. package/dist/internal/ids.d.ts.map +1 -0
  237. package/dist/internal/ids.js +124 -0
  238. package/dist/internal/ids.js.map +1 -0
  239. package/dist/internal/json-value.d.ts +15 -0
  240. package/dist/internal/json-value.d.ts.map +1 -0
  241. package/dist/internal/json-value.js +61 -0
  242. package/dist/internal/json-value.js.map +1 -0
  243. package/dist/internal/package-version.d.ts +6 -0
  244. package/dist/internal/package-version.d.ts.map +1 -0
  245. package/dist/internal/package-version.js +14 -0
  246. package/dist/internal/package-version.js.map +1 -0
  247. package/dist/internal/realm-slot.d.ts +13 -0
  248. package/dist/internal/realm-slot.d.ts.map +1 -0
  249. package/dist/internal/realm-slot.js +23 -0
  250. package/dist/internal/realm-slot.js.map +1 -0
  251. package/dist/internal/redact.d.ts +33 -0
  252. package/dist/internal/redact.d.ts.map +1 -0
  253. package/dist/internal/redact.js +56 -0
  254. package/dist/internal/redact.js.map +1 -0
  255. package/dist/internal/regexp.d.ts +10 -0
  256. package/dist/internal/regexp.d.ts.map +1 -0
  257. package/dist/internal/regexp.js +27 -0
  258. package/dist/internal/regexp.js.map +1 -0
  259. package/dist/internal/text.d.ts +39 -0
  260. package/dist/internal/text.d.ts.map +1 -0
  261. package/dist/internal/text.js +66 -0
  262. package/dist/internal/text.js.map +1 -0
  263. package/dist/internal/time.d.ts +37 -0
  264. package/dist/internal/time.d.ts.map +1 -0
  265. package/dist/internal/time.js +91 -0
  266. package/dist/internal/time.js.map +1 -0
  267. package/dist/internal/trace.d.ts +18 -0
  268. package/dist/internal/trace.d.ts.map +1 -0
  269. package/dist/internal/trace.js +46 -0
  270. package/dist/internal/trace.js.map +1 -0
  271. package/dist/internal/urls.d.ts +31 -0
  272. package/dist/internal/urls.d.ts.map +1 -0
  273. package/dist/internal/urls.js +95 -0
  274. package/dist/internal/urls.js.map +1 -0
  275. package/dist/locator/engine.d.ts +65 -0
  276. package/dist/locator/engine.d.ts.map +1 -0
  277. package/dist/locator/engine.js +164 -0
  278. package/dist/locator/engine.js.map +1 -0
  279. package/dist/locator/expression.d.ts +19 -0
  280. package/dist/locator/expression.d.ts.map +1 -0
  281. package/dist/locator/expression.js +85 -0
  282. package/dist/locator/expression.js.map +1 -0
  283. package/dist/locator/screen.d.ts +36 -0
  284. package/dist/locator/screen.d.ts.map +1 -0
  285. package/dist/locator/screen.js +281 -0
  286. package/dist/locator/screen.js.map +1 -0
  287. package/dist/report/build.d.ts +214 -0
  288. package/dist/report/build.d.ts.map +1 -0
  289. package/dist/report/build.js +346 -0
  290. package/dist/report/build.js.map +1 -0
  291. package/dist/report/code-frame.d.ts +20 -0
  292. package/dist/report/code-frame.d.ts.map +1 -0
  293. package/dist/report/code-frame.js +73 -0
  294. package/dist/report/code-frame.js.map +1 -0
  295. package/dist/report/debug-steps.d.ts +14 -0
  296. package/dist/report/debug-steps.d.ts.map +1 -0
  297. package/dist/report/debug-steps.js +85 -0
  298. package/dist/report/debug-steps.js.map +1 -0
  299. package/dist/report/list.d.ts +80 -0
  300. package/dist/report/list.d.ts.map +1 -0
  301. package/dist/report/list.js +372 -0
  302. package/dist/report/list.js.map +1 -0
  303. package/dist/report/live-status.d.ts +51 -0
  304. package/dist/report/live-status.d.ts.map +1 -0
  305. package/dist/report/live-status.js +162 -0
  306. package/dist/report/live-status.js.map +1 -0
  307. package/dist/report/write.d.ts +4 -0
  308. package/dist/report/write.d.ts.map +1 -0
  309. package/dist/report/write.js +13 -0
  310. package/dist/report/write.js.map +1 -0
  311. package/dist/run/app-process.d.ts +18 -0
  312. package/dist/run/app-process.d.ts.map +1 -0
  313. package/dist/run/app-process.js +112 -0
  314. package/dist/run/app-process.js.map +1 -0
  315. package/dist/run/artifacts.d.ts +51 -0
  316. package/dist/run/artifacts.d.ts.map +1 -0
  317. package/dist/run/artifacts.js +114 -0
  318. package/dist/run/artifacts.js.map +1 -0
  319. package/dist/run/events.d.ts +100 -0
  320. package/dist/run/events.d.ts.map +1 -0
  321. package/dist/run/events.js +59 -0
  322. package/dist/run/events.js.map +1 -0
  323. package/dist/run/execute.d.ts +119 -0
  324. package/dist/run/execute.d.ts.map +1 -0
  325. package/dist/run/execute.js +555 -0
  326. package/dist/run/execute.js.map +1 -0
  327. package/dist/run/fixtures.d.ts +40 -0
  328. package/dist/run/fixtures.d.ts.map +1 -0
  329. package/dist/run/fixtures.js +408 -0
  330. package/dist/run/fixtures.js.map +1 -0
  331. package/dist/run/in-process.d.ts +24 -0
  332. package/dist/run/in-process.d.ts.map +1 -0
  333. package/dist/run/in-process.js +120 -0
  334. package/dist/run/in-process.js.map +1 -0
  335. package/dist/run/public.d.ts +19 -0
  336. package/dist/run/public.d.ts.map +1 -0
  337. package/dist/run/public.js +11 -0
  338. package/dist/run/public.js.map +1 -0
  339. package/dist/run/realm.d.ts +52 -0
  340. package/dist/run/realm.d.ts.map +1 -0
  341. package/dist/run/realm.js +101 -0
  342. package/dist/run/realm.js.map +1 -0
  343. package/dist/run/records.d.ts +87 -0
  344. package/dist/run/records.d.ts.map +1 -0
  345. package/dist/run/records.js +3 -0
  346. package/dist/run/records.js.map +1 -0
  347. package/dist/run/retry.d.ts +18 -0
  348. package/dist/run/retry.d.ts.map +1 -0
  349. package/dist/run/retry.js +33 -0
  350. package/dist/run/retry.js.map +1 -0
  351. package/dist/run/runner.d.ts +49 -0
  352. package/dist/run/runner.d.ts.map +1 -0
  353. package/dist/run/runner.js +375 -0
  354. package/dist/run/runner.js.map +1 -0
  355. package/dist/run/scheduler.d.ts +45 -0
  356. package/dist/run/scheduler.d.ts.map +1 -0
  357. package/dist/run/scheduler.js +512 -0
  358. package/dist/run/scheduler.js.map +1 -0
  359. package/dist/run/serial.d.ts +52 -0
  360. package/dist/run/serial.d.ts.map +1 -0
  361. package/dist/run/serial.js +247 -0
  362. package/dist/run/serial.js.map +1 -0
  363. package/dist/run/sessions.d.ts +54 -0
  364. package/dist/run/sessions.d.ts.map +1 -0
  365. package/dist/run/sessions.js +221 -0
  366. package/dist/run/sessions.js.map +1 -0
  367. package/dist/run/steps.d.ts +196 -0
  368. package/dist/run/steps.d.ts.map +1 -0
  369. package/dist/run/steps.js +151 -0
  370. package/dist/run/steps.js.map +1 -0
  371. package/dist/run/unit-runner.d.ts +30 -0
  372. package/dist/run/unit-runner.d.ts.map +1 -0
  373. package/dist/run/unit-runner.js +11 -0
  374. package/dist/run/unit-runner.js.map +1 -0
  375. package/dist/run/units.d.ts +50 -0
  376. package/dist/run/units.d.ts.map +1 -0
  377. package/dist/run/units.js +103 -0
  378. package/dist/run/units.js.map +1 -0
  379. package/dist/run/worker/entry.d.ts +8 -0
  380. package/dist/run/worker/entry.d.ts.map +1 -0
  381. package/dist/run/worker/entry.js +137 -0
  382. package/dist/run/worker/entry.js.map +1 -0
  383. package/dist/run/worker/handle.d.ts +10 -0
  384. package/dist/run/worker/handle.d.ts.map +1 -0
  385. package/dist/run/worker/handle.js +74 -0
  386. package/dist/run/worker/handle.js.map +1 -0
  387. package/dist/run/worker/protocol.d.ts +129 -0
  388. package/dist/run/worker/protocol.d.ts.map +1 -0
  389. package/dist/run/worker/protocol.js +18 -0
  390. package/dist/run/worker/protocol.js.map +1 -0
  391. package/dist/run/worker/session.d.ts +69 -0
  392. package/dist/run/worker/session.d.ts.map +1 -0
  393. package/dist/run/worker/session.js +123 -0
  394. package/dist/run/worker/session.js.map +1 -0
  395. package/dist/types.d.ts +630 -0
  396. package/dist/types.d.ts.map +1 -0
  397. package/dist/types.js +6 -0
  398. package/dist/types.js.map +1 -0
  399. package/package.json +91 -0
@@ -0,0 +1,375 @@
1
+ /** Run orchestration: config, collection, selection, execution, reporting. */
2
+ import path from 'node:path';
3
+ import { discoverConfig, loadConfigModule } from '../config/load.js';
4
+ import { isCiMode, resolveConfig, } from '../config/resolve.js';
5
+ import { collect } from '../collect/collect.js';
6
+ import { select } from '../collect/select.js';
7
+ import { classifyError, combineExitCodes, ConfigurationError, E2EError, errorMessage, exitCodeForCategory, serializeError, } from '../internal/errors.js';
8
+ import { loadAiSdk } from '../agent/ai-sdk.js';
9
+ import { AiTraceCollector, AiTraceRecorder, registerAiTraceRecorder } from '../internal/ai-trace.js';
10
+ import { DebugTrace } from '../internal/debug.js';
11
+ import { timestamp, uuidv7 } from '../internal/ids.js';
12
+ import { buildReport, describeTarget } from '../report/build.js';
13
+ import { agentStepTable } from '../report/debug-steps.js';
14
+ import { ListReporter } from '../report/list.js';
15
+ import { writeJsonReport } from '../report/write.js';
16
+ import { AppProcess } from './app-process.js';
17
+ import { createRunEventEmitter, toEventResult } from './events.js';
18
+ import { inProcessSpawner } from './in-process.js';
19
+ import { runUnits } from './scheduler.js';
20
+ import { SessionStore } from './sessions.js';
21
+ import { childProcessSpawner } from './worker/handle.js';
22
+ import { setCredentialRegistry } from '../credentials.js';
23
+ /** Executes one complete run and returns the outcome without exiting. */
24
+ export async function run(options = {}) {
25
+ const cwd = options.cwd ?? process.cwd();
26
+ const env = options.env ?? process.env;
27
+ const runId = uuidv7();
28
+ const startedAt = timestamp();
29
+ const debug = new DebugTrace(options.debug === true);
30
+ const aiTrace = options.aiTrace === true ? new AiTraceCollector() : undefined;
31
+ /** The in-process recorder; child-process workers own their own. */
32
+ let aiTraceRecorder;
33
+ const interruptController = new AbortController();
34
+ const runErrors = [];
35
+ const results = [];
36
+ const serialGroups = [];
37
+ const targetProvenance = new Map();
38
+ let appProcess;
39
+ let sessionStore;
40
+ // Hoisted: workers re-resolve the same config file and need these overrides,
41
+ // or a flag would apply in the runner and be dropped in every worker.
42
+ const cli = {};
43
+ if (options.retries !== undefined)
44
+ cli.retries = options.retries;
45
+ if (options.workers !== undefined)
46
+ cli.workers = options.workers;
47
+ if (options.reporters !== undefined)
48
+ cli.reporters = options.reporters;
49
+ if (options.noCache === true)
50
+ cli.cache = 'off';
51
+ // Config resolves before anything is emitted, and its failure is kept rather
52
+ // than thrown: the reporter set is config truth (CLI overrides merge during
53
+ // resolution), so the emitter below is built exactly once from the set
54
+ // actually in force. When config itself failed, the CLI's own value is the
55
+ // best available, and the failure still renders through it.
56
+ const loaded = await debug.time('config.load', () => loadRunConfig(options, cwd, env, cli)).then((config) => ({ config, error: undefined }), (cause) => ({ config: undefined, error: classifyError(cause) }));
57
+ // The event stream is the run's single spine: the list reporter is just one
58
+ // sink on it, beside the host's, so the CLI and a host can never see
59
+ // different stories.
60
+ const reporters = loaded.config?.reporters ?? options.reporters ?? ['list'];
61
+ const emit = createRunEventEmitter([
62
+ options.quiet === true || reporters.includes('json') ? undefined : new ListReporter().handle,
63
+ options.onEvent,
64
+ ]);
65
+ const jsonReport = reporters.includes('json');
66
+ /** Records one run-level error once: into the report and onto the stream. */
67
+ const recordRunError = (runError) => {
68
+ runErrors.push(runError);
69
+ emit({ type: 'run-error', error: runError.error });
70
+ };
71
+ /** Records a failure of the run itself, outside any test. */
72
+ const recordFailure = (cause, phase) => {
73
+ recordRunError({ error: serializeError(classifyError(cause), phase === undefined ? {} : { phase }) });
74
+ };
75
+ /**
76
+ * The exit code is a fold over run state — every result, every run error,
77
+ * the interrupt — never threaded through by hand. A run error recorded
78
+ * anywhere, including during teardown or the report write, reaches the exit
79
+ * code the same way.
80
+ */
81
+ const currentExitCode = () => combineExitCodes([
82
+ ...resultExitCodes(results),
83
+ ...runErrors.map((runError) => exitCodeForCategory(runError.error.category)),
84
+ ...(interruptController.signal.aborted ? [130] : []),
85
+ ]);
86
+ const buildRunReport = (exitCode) => buildReport({
87
+ runId,
88
+ config: loaded.config,
89
+ startedAt,
90
+ status: statusOf(exitCode),
91
+ exitCode,
92
+ results,
93
+ serialGroups,
94
+ runErrors,
95
+ targetProvenance,
96
+ });
97
+ /**
98
+ * Writes the canonical report and returns its path only once the file
99
+ * exists: a host must never be handed a path to a report that was not
100
+ * written. A lost canonical report is an infrastructure run error, not a
101
+ * footnote: recorded like any other, it reaches the exit code, and the
102
+ * returned in-memory document becomes the only complete record. The file
103
+ * is not retried — the destination just failed.
104
+ */
105
+ const writeCanonicalReport = async (config) => {
106
+ const target = path.join(path.dirname(resolveArtifactsRoot(config, options.artifactsDir)), 'report.json');
107
+ try {
108
+ await writeJsonReport(target, buildRunReport(currentExitCode()));
109
+ return target;
110
+ }
111
+ catch (cause) {
112
+ recordFailure(new E2EError('infrastructure', 'REPORT_WRITE_FAILED', `the canonical report could not be written: ${errorMessage(cause)}`, { cause }), 'report');
113
+ return undefined;
114
+ }
115
+ };
116
+ /**
117
+ * Writes the AI trace next to the report, on the same terms: the path is
118
+ * returned only once the file exists, and a lost trace is a recorded run
119
+ * error. The in-process recorder is drained here; child-process workers
120
+ * already shipped theirs over the worker channel.
121
+ */
122
+ const writeAiTrace = async (config) => {
123
+ if (aiTrace === undefined)
124
+ return undefined;
125
+ if (aiTraceRecorder !== undefined) {
126
+ aiTrace.merge(aiTraceRecorder.drain({ all: true }));
127
+ aiTraceRecorder.dispose();
128
+ aiTraceRecorder = undefined;
129
+ }
130
+ const target = path.join(path.dirname(resolveArtifactsRoot(config, options.artifactsDir)), 'ai-trace.json');
131
+ try {
132
+ await writeJsonReport(target, aiTrace.document());
133
+ return target;
134
+ }
135
+ catch (cause) {
136
+ recordFailure(new E2EError('infrastructure', 'REPORT_WRITE_FAILED', `the AI trace could not be written: ${errorMessage(cause)}`, { cause }), 'report');
137
+ return undefined;
138
+ }
139
+ };
140
+ const finish = async () => {
141
+ const aiTracePath = loaded.config === undefined ? undefined : await writeAiTrace(loaded.config);
142
+ const reportPath = loaded.config === undefined ? undefined : await writeCanonicalReport(loaded.config);
143
+ const exitCode = currentExitCode();
144
+ const status = statusOf(exitCode);
145
+ const report = buildRunReport(exitCode);
146
+ setCredentialRegistry(undefined);
147
+ emit({
148
+ type: 'run-finished',
149
+ status,
150
+ exitCode,
151
+ ...(reportPath === undefined ? {} : { reportPath }),
152
+ ...(aiTracePath === undefined ? {} : { aiTracePath }),
153
+ });
154
+ if (jsonReport) {
155
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
156
+ }
157
+ if (debug.enabled) {
158
+ process.stderr.write(debug.summary());
159
+ process.stderr.write(agentStepTable(results, serialGroups));
160
+ }
161
+ return { exitCode, status, report, reportPath, aiTracePath, results };
162
+ };
163
+ if (loaded.config === undefined) {
164
+ recordFailure(loaded.error, 'config');
165
+ return finish();
166
+ }
167
+ const config = loaded.config;
168
+ setCredentialRegistry(config.credentials);
169
+ emit({
170
+ type: 'run-started',
171
+ runId,
172
+ projectId: config.projectId,
173
+ projectRoot: config.projectRoot,
174
+ ci: isCiMode(env),
175
+ targets: config.targets.map((target) => target.name),
176
+ });
177
+ const executeRun = async () => {
178
+ const interrupted = interruptController.signal;
179
+ if (config.app.command !== undefined) {
180
+ const app = new AppProcess(config.app.command, config.projectRoot, config.app.readyUrl);
181
+ appProcess = app;
182
+ await debug.time('app.start', () => app.start(interrupted));
183
+ }
184
+ // A run cancelled before any test could start collects nothing: the
185
+ // interrupt alone decides the outcome.
186
+ if (interrupted.aborted)
187
+ return;
188
+ let planned;
189
+ try {
190
+ planned = await debug.time('collect', async () => {
191
+ const collection = await collect(config, options.files);
192
+ const filters = {
193
+ ...(options.tags !== undefined ? { tags: options.tags } : {}),
194
+ ...(options.tagMode !== undefined ? { tagMode: options.tagMode } : {}),
195
+ ...(options.targetIds !== undefined ? { targetIds: options.targetIds } : {}),
196
+ };
197
+ const selection = select(collection, config, filters, options.passWithNoTests !== undefined ? { passWithNoTests: options.passWithNoTests } : {});
198
+ return { collection, selection };
199
+ });
200
+ }
201
+ catch (cause) {
202
+ recordFailure(cause, 'collection');
203
+ return;
204
+ }
205
+ const { collection, selection } = planned;
206
+ emit({ type: 'plan', total: selection.pairs.length });
207
+ const artifactsRoot = resolveArtifactsRoot(config, options.artifactsDir);
208
+ const sessionsRoot = path.join(config.projectRoot, '.e2e', 'sessions');
209
+ const store = SessionStore.create(runId, sessionsRoot);
210
+ sessionStore = store;
211
+ // Pre-flight: grade every selected target from its backend declaration
212
+ // before any worker starts, so a config that asks for more than the
213
+ // backend offers fails here, once, instead of inside a launch budget.
214
+ for (const { target } of selection.perTarget) {
215
+ targetProvenance.set(target.name, validateBackend(target, config));
216
+ }
217
+ // Workers re-load the config module themselves, so a file-backed config
218
+ // runs across processes. A programmatic `rawConfig` cannot cross a process
219
+ // boundary (it may hold live backend handles), so it runs in-process
220
+ // against one worker. Either way the scheduler is the only engine.
221
+ if (aiTrace !== undefined && config.configPath === undefined) {
222
+ // In-process execution shares this process with the runner, so the
223
+ // recorder lives here and is drained straight into the collector.
224
+ aiTraceRecorder = new AiTraceRecorder();
225
+ await registerAiTraceRecorder(aiTraceRecorder, loadAiSdk);
226
+ }
227
+ const transport = config.configPath === undefined
228
+ ? {
229
+ workers: 1,
230
+ spawn: inProcessSpawner({
231
+ config,
232
+ selection,
233
+ runId,
234
+ artifactsRoot,
235
+ sessionStore: store,
236
+ headed: options.headed ?? false,
237
+ debug,
238
+ }),
239
+ }
240
+ : {
241
+ workers: config.workers,
242
+ spawn: childProcessSpawner({
243
+ configPath: config.configPath,
244
+ projectRoot: config.projectRoot,
245
+ configDigest: config.configDigest,
246
+ cli,
247
+ runId,
248
+ artifactsRoot,
249
+ headed: options.headed ?? false,
250
+ sessionsRoot,
251
+ sessionKeyBase64: store.exportKeyForWorker(),
252
+ debug: debug.enabled,
253
+ aiTrace: aiTrace !== undefined,
254
+ env,
255
+ }),
256
+ };
257
+ await debug.time('scheduler', () => runUnits({
258
+ selection,
259
+ collection,
260
+ projectRoot: config.projectRoot,
261
+ workers: transport.workers,
262
+ spawn: transport.spawn,
263
+ interruptGraceMs: config.timeout + config.cleanupTimeout,
264
+ interruptSignal: interrupted,
265
+ events: {
266
+ onResult: (result) => {
267
+ results.push(result);
268
+ emit({ type: 'test-finished', result: toEventResult(result) });
269
+ },
270
+ onSerialGroup: (group) => {
271
+ serialGroups.push(group);
272
+ emit({ type: 'serial-group', group });
273
+ },
274
+ onRunError: recordRunError,
275
+ onTestStart: (testId, title, targetName) => emit({ type: 'test-started', testId, title, target: targetName }),
276
+ onProgress: (testId, targetName, progress) => emit({ type: 'step', testId, target: targetName, progress }),
277
+ onDebug: (snapshot) => debug.merge(snapshot),
278
+ onAiTrace: (snapshot) => aiTrace?.merge(snapshot),
279
+ },
280
+ }));
281
+ };
282
+ // The interrupt bridge is armed for the whole body — app startup, collection,
283
+ // scheduling — so a host's cancellation lands wherever the run is, not only
284
+ // once the scheduler happens to be running. From here the run owns external
285
+ // resources. Failures anywhere are recorded, never thrown — the outcome must
286
+ // survive its own execution and its own cleanup — and teardown always runs
287
+ // before the terminal `run-finished`, so that event means the app process
288
+ // and session store are gone.
289
+ const externalSignal = options.interruptSignal;
290
+ const onInterrupt = () => interruptController.abort();
291
+ if (externalSignal?.aborted === true)
292
+ interruptController.abort();
293
+ externalSignal?.addEventListener('abort', onInterrupt, { once: true });
294
+ process.once('SIGINT', onInterrupt);
295
+ process.once('SIGTERM', onInterrupt);
296
+ try {
297
+ await executeRun();
298
+ }
299
+ catch (cause) {
300
+ recordFailure(cause);
301
+ }
302
+ finally {
303
+ process.removeListener('SIGINT', onInterrupt);
304
+ process.removeListener('SIGTERM', onInterrupt);
305
+ externalSignal?.removeEventListener('abort', onInterrupt);
306
+ }
307
+ for (const teardown of [() => sessionStore?.cleanup(), () => appProcess?.stop()]) {
308
+ try {
309
+ await teardown();
310
+ }
311
+ catch (cause) {
312
+ recordFailure(cause);
313
+ }
314
+ }
315
+ return finish();
316
+ }
317
+ /** Resolves the run's config: a supplied value, or the discovered file. */
318
+ async function loadRunConfig(options, cwd, env, cli) {
319
+ if (options.rawConfig !== undefined) {
320
+ return resolveConfig(options.rawConfig, { projectRoot: cwd, env, cli });
321
+ }
322
+ const discovered = discoverConfig(cwd, options.configPath);
323
+ const raw = discovered.configPath === undefined ? {} : await loadConfigModule(discovered.configPath);
324
+ return resolveConfig(raw, {
325
+ projectRoot: discovered.projectRoot,
326
+ ...(discovered.configPath !== undefined ? { configPath: discovered.configPath } : {}),
327
+ env,
328
+ cli,
329
+ });
330
+ }
331
+ function statusOf(exitCode) {
332
+ return exitCode === 0 ? 'passed' : exitCode === 1 ? 'failed' : exitCode === 130 ? 'interrupted' : 'error';
333
+ }
334
+ /**
335
+ * Grades one target from its backend declaration and validates the configured
336
+ * artifacts against it; returns the report provenance.
337
+ */
338
+ function validateBackend(target, config) {
339
+ const provenance = describeTarget(target);
340
+ // The default artifact set is best-effort: a backend without evidence
341
+ // capture simply records none. Asking for one explicitly is a contract.
342
+ for (const artifact of config.artifactsExplicit ? config.artifacts : []) {
343
+ if (!provenance.artifactCapabilities.includes(artifact)) {
344
+ throw new ConfigurationError('UNSUPPORTED_ARTIFACT', `target "${target.name}" (backend ${provenance.backend.name}) does not support the configured "${artifact}" artifact`);
345
+ }
346
+ }
347
+ return provenance;
348
+ }
349
+ function resultExitCodes(results) {
350
+ const codes = [0];
351
+ for (const result of results) {
352
+ switch (result.status) {
353
+ case 'failed':
354
+ case 'timed-out':
355
+ codes.push(1);
356
+ for (const attempt of result.attempts) {
357
+ if (attempt.error !== undefined)
358
+ codes.push(exitCodeForCategory(attempt.error.category));
359
+ }
360
+ break;
361
+ case 'interrupted':
362
+ codes.push(130);
363
+ break;
364
+ default:
365
+ break;
366
+ }
367
+ }
368
+ return codes;
369
+ }
370
+ function resolveArtifactsRoot(config, override) {
371
+ if (override !== undefined)
372
+ return path.resolve(config.projectRoot, override);
373
+ return path.join(config.projectRoot, '.e2e', 'artifacts');
374
+ }
375
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/run/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The run engine: dispatches file-target work units across workers (spec
3
+ * 11-lifecycle.md). Per target, setup units complete before ordinary units
4
+ * dispatch; a worker is bound to one target, runs one unit at a time, and is
5
+ * discarded after any failing unit or infrastructure fault.
6
+ *
7
+ * Workers are reached only through `SpawnUnitRunner`, so the same scheduling,
8
+ * gating, and reporting logic covers both child-process and in-process
9
+ * execution.
10
+ */
11
+ import type { Collection } from '../collect/collect.ts';
12
+ import type { Selection } from '../collect/select.ts';
13
+ import type { AiTraceSnapshot } from '../internal/ai-trace.ts';
14
+ import type { DebugSnapshot } from '../internal/debug.ts';
15
+ import type { ResultRecord, RunError, SerialGroupRecord } from './records.ts';
16
+ import type { StepProgress } from './steps.ts';
17
+ import type { SpawnUnitRunner } from './unit-runner.ts';
18
+ export interface SchedulerEvents {
19
+ onResult(result: ResultRecord): void;
20
+ onSerialGroup(group: SerialGroupRecord): void;
21
+ onRunError(error: RunError): void;
22
+ /** A worker began executing one test-target pair. */
23
+ onTestStart?(testId: string, title: string, targetName: string): void;
24
+ /** Live step progress of one running attempt. */
25
+ onProgress?(testId: string, targetName: string, progress: StepProgress): void;
26
+ /** Phase timings a child-process worker drained after one unit. */
27
+ onDebug?(snapshot: DebugSnapshot): void;
28
+ /** Model calls a child-process worker drained after one unit. */
29
+ onAiTrace?(snapshot: AiTraceSnapshot): void;
30
+ }
31
+ export interface RunUnitsOptions {
32
+ readonly selection: Selection;
33
+ readonly collection: Collection;
34
+ readonly projectRoot: string;
35
+ /** Maximum workers alive at once across all targets. */
36
+ readonly workers: number;
37
+ /** Budget for a worker to finish an in-flight unit after an interrupt. */
38
+ readonly interruptGraceMs: number;
39
+ readonly interruptSignal: AbortSignal;
40
+ readonly spawn: SpawnUnitRunner;
41
+ readonly events: SchedulerEvents;
42
+ }
43
+ /** Runs every selected unit and streams records. */
44
+ export declare function runUnits(options: RunUnitsOptions): Promise<void>;
45
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/run/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,kBAAkB,CAAC;AAYpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC9C,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClC,qDAAqD;IACrD,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACtE,iDAAiD;IACjD,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9E,mEAAmE;IACnE,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,iEAAiE;IACjE,SAAS,CAAC,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAQD,oDAAoD;AACpD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}