@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,59 @@
1
+ /**
2
+ * Structured run events (`@e2edev/e2e/run`): the run's single event spine.
3
+ *
4
+ * Every event is plain JSON data — the same records the report persists and
5
+ * the worker IPC already carries, so a host can stream them over any wire
6
+ * without touching live handles. The list reporter consumes exactly this
7
+ * stream (`ListReporter.handle`, report/list.ts), so the CLI's rendering and a
8
+ * host's dashboard can never drift: there is one dispatch, not two. The
9
+ * report stays the canonical record; the stream exists so consumers can
10
+ * render progress while the run is still going.
11
+ *
12
+ * The emitter is the single writer: it stamps `seq` and `at`, so ordering
13
+ * survives any transport that preserves per-connection order. A sink that
14
+ * throws is quarantined for the rest of the run; a sink whose returned
15
+ * promise rejects is quarantined once the rejection settles, so events
16
+ * emitted before then may still reach it. Either way a broken consumer can
17
+ * never fail the run.
18
+ */
19
+ import { timestamp } from '../internal/ids.js';
20
+ import { encodeResult } from './worker/protocol.js';
21
+ /** Strips the live target from a result, keeping its stable identity. */
22
+ export function toEventResult(record) {
23
+ return {
24
+ ...encodeResult(record),
25
+ target: { name: record.target.name, platform: record.target.platform },
26
+ };
27
+ }
28
+ /**
29
+ * Builds the run's single event writer over every configured sink. Sinks are
30
+ * quarantined independently, so a broken host callback cannot silence the
31
+ * list reporter or vice versa. Returns a no-op when no sink is configured,
32
+ * so call sites never branch.
33
+ */
34
+ export function createRunEventEmitter(sinks) {
35
+ const active = sinks.filter((sink) => sink !== undefined);
36
+ if (active.length === 0)
37
+ return () => undefined;
38
+ let seq = 0;
39
+ const quarantined = new Set();
40
+ return (fact) => {
41
+ seq += 1;
42
+ const event = { seq, at: timestamp(), ...fact };
43
+ for (const sink of active) {
44
+ if (quarantined.has(sink))
45
+ continue;
46
+ try {
47
+ const result = sink(event);
48
+ // An async sink's rejection must neither surface as an unhandled
49
+ // rejection nor keep the sink subscribed.
50
+ if (result instanceof Promise)
51
+ result.catch(() => quarantined.add(sink));
52
+ }
53
+ catch {
54
+ quarantined.add(sink);
55
+ }
56
+ }
57
+ };
58
+ }
59
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/run/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAoE3E,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO;QACL,GAAG,YAAY,CAAC,MAAM,CAAC;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;KACvE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAA4C;IAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC5C,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,GAAG,IAAI,CAAC,CAAC;QACT,MAAM,KAAK,GAAa,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,iEAAiE;gBACjE,0CAA0C;gBAC1C,IAAI,MAAM,YAAY,OAAO;oBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,119 @@
1
+ /** Test-target execution engine (spec 11-lifecycle.md). */
2
+ import type { TargetSession } from '../backend/surface.ts';
3
+ import type { ResolvedConfig, ResolvedTarget } from '../config/resolve.ts';
4
+ import { type SerializedError } from '../internal/errors.ts';
5
+ import { DebugTrace } from '../internal/debug.ts';
6
+ import type { CollectedFile } from '../collect/collect.ts';
7
+ import type { ModuleRegistration, RegisteredTest } from '../collect/registry.ts';
8
+ import type { TestTargetPair } from '../collect/select.ts';
9
+ import type { ArtifactStore } from '../types.ts';
10
+ import { type ArtifactSink } from './fixtures.ts';
11
+ import { RealmManager, type Realm } from './realm.ts';
12
+ import type { AttemptRecord, ResultRecord, RunError, SerialGroupRecord } from './records.ts';
13
+ import { type SerialHost, type SharedSerialSession } from './serial.ts';
14
+ import { SessionStaging, SessionStore } from './sessions.ts';
15
+ import { type StepProgress } from './steps.ts';
16
+ export interface ExecutionEvents {
17
+ onResult?(result: ResultRecord): void;
18
+ onSerialGroup?(group: SerialGroupRecord): void;
19
+ /** Fires before a runnable pair (or serial unit via its first member) starts. */
20
+ onPairStart?(pair: TestTargetPair): void;
21
+ /** Live step progress of one running attempt, for reporters. */
22
+ onProgress?(testId: string, progress: StepProgress): void;
23
+ }
24
+ export interface TargetExecutorOptions {
25
+ readonly config: ResolvedConfig;
26
+ readonly target: ResolvedTarget;
27
+ readonly runId: string;
28
+ readonly artifactsRoot: string;
29
+ readonly sessionStore: SessionStore;
30
+ readonly headed: boolean;
31
+ readonly interruptSignal: AbortSignal;
32
+ readonly debug?: DebugTrace;
33
+ readonly events?: ExecutionEvents;
34
+ }
35
+ /** The file-path slice of a collected file that unit execution needs. */
36
+ export type FileRef = Pick<CollectedFile, 'file' | 'absolutePath'>;
37
+ /** How one attempt acquires its session and session-staging hooks. */
38
+ export type AttemptContext = {
39
+ readonly kind: 'ordinary';
40
+ } | {
41
+ readonly kind: 'setup';
42
+ readonly staging: SessionStaging;
43
+ } | {
44
+ readonly kind: 'serial';
45
+ readonly shared: SharedSerialSession;
46
+ };
47
+ /** Executes every selected pair for one target sequentially. */
48
+ export declare class TargetExecutor implements SerialHost {
49
+ private readonly options;
50
+ readonly target: ResolvedTarget;
51
+ get runId(): string;
52
+ get artifactStore(): ArtifactStore | undefined;
53
+ readonly artifactsRoot: string;
54
+ readonly interruptSignal: AbortSignal;
55
+ readonly realms: RealmManager;
56
+ readonly debug: DebugTrace;
57
+ private readonly runErrors;
58
+ private readonly sessionIdentity;
59
+ /** Resolves once the backend's init hook completed for this worker. */
60
+ private backendReady;
61
+ constructor(options: TargetExecutorOptions);
62
+ private get config();
63
+ /** Emits one final result record (SerialHost). Records are not retained. */
64
+ emit(result: ResultRecord): void;
65
+ /** Builds one backend operation context. */
66
+ private op;
67
+ /** Run-level errors recorded so far, in order. */
68
+ collectedRunErrors(): readonly RunError[];
69
+ /**
70
+ * Runs the backend's init hook once per worker, before the first session.
71
+ * Boot work (simulators, device leases) is bounded by the launch timeout
72
+ * but never charged against a step budget.
73
+ */
74
+ private initBackendOnce;
75
+ /**
76
+ * Runs one lifecycle call on the backend seam within the given budget. The
77
+ * signal handed to `run` follows `parent` and is aborted the moment the call
78
+ * fails, timeout included, so a hook that outlived its budget is told to
79
+ * stop instead of running on into the retry. Synchronous throws are caught,
80
+ * and every failure is translated onto the runner taxonomy: a backend
81
+ * failing outside its contract is infrastructure, never a test error.
82
+ */
83
+ private lifecycle;
84
+ /**
85
+ * Disposes the backend at worker end of life, bounded by the cleanup budget.
86
+ * Runs whether or not `init` did: a backend may hold resources it acquired
87
+ * lazily, and the contract makes `dispose` safe to call on a cold backend.
88
+ */
89
+ dispose(): Promise<void>;
90
+ /**
91
+ * Runs one file-target unit: runnable pairs of a single file, in declaration
92
+ * order, sharing a realm between passing non-serial tests (spec
93
+ * 11-lifecycle.md). Dispatch-time gating (selection dispositions and
94
+ * setup-failure dependencies) belongs to the scheduler, so every pair
95
+ * reaching here is runnable.
96
+ */
97
+ runFileUnit(file: FileRef, filePairs: readonly TestTargetPair[], freshRegistration?: ModuleRegistration): Promise<void>;
98
+ /** Records a deterministic-registration violation as a run-level error. */
99
+ recordDisappeared(message: string): void;
100
+ private runOrdinaryPair;
101
+ /** Runs one setup pair to completion, persisting staged sessions on success. */
102
+ runSetupUnit(pair: TestTargetPair, freshRegistration?: ModuleRegistration): Promise<void>;
103
+ /** Starts one attempt on the backend, restores a configured session, and starts tracing. */
104
+ launchSession(pair: TestTargetPair, attemptId: string, artifactsDir: string, signal: AbortSignal): Promise<TargetSession>;
105
+ /** Ends one attempt's isolation within the cleanup budget. */
106
+ private endAttempt;
107
+ /** Finalizes trace and ends the attempt with a fresh cleanup budget. */
108
+ closeSession(session: TargetSession, attemptId: string, record: {
109
+ cleanup: 'complete' | 'failed' | 'forced';
110
+ }, artifactSink: ArtifactSink, secondaryErrors: SerializedError[]): Promise<void>;
111
+ /** Runs one attempt to completion (SerialHost). */
112
+ /**
113
+ * Runs one attempt under its AI trace scope, so every model call the
114
+ * attempt makes is attributed to this test, target, and attempt.
115
+ */
116
+ runAttempt(pair: TestTargetPair, registered: RegisteredTest, realm: Realm, attemptIndex: number, context: AttemptContext): Promise<AttemptRecord>;
117
+ private executeAttempt;
118
+ }
119
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/run/execute.ts"],"names":[],"mappings":"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"}