e2e 0.15.2 → 0.17.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 (1024) hide show
  1. package/dist/.build.json +1 -1
  2. package/dist/agent/act-validation.d.ts +10 -1
  3. package/dist/agent/act-validation.js +48 -1
  4. package/dist/agent/act.d.ts +1 -2
  5. package/dist/agent/act.js +29 -9
  6. package/dist/agent/action-dispatcher.d.ts +0 -1
  7. package/dist/agent/action-dispatcher.js +4 -6
  8. package/dist/agent/action-names.d.ts +0 -1
  9. package/dist/agent/action-names.js +0 -1
  10. package/dist/agent/actions.d.ts +32 -24
  11. package/dist/agent/actions.js +38 -25
  12. package/dist/agent/agent-brand.d.ts +0 -1
  13. package/dist/agent/agent-brand.js +0 -1
  14. package/dist/agent/ai-sdk.d.ts +7 -1
  15. package/dist/agent/ai-sdk.js +11 -1
  16. package/dist/agent/call-options.d.ts +0 -1
  17. package/dist/agent/call-options.js +0 -1
  18. package/dist/agent/default-agent.d.ts +0 -1
  19. package/dist/agent/default-agent.js +0 -1
  20. package/dist/agent/derived.d.ts +0 -1
  21. package/dist/agent/derived.js +0 -1
  22. package/dist/agent/error.d.ts +0 -1
  23. package/dist/agent/error.js +0 -1
  24. package/dist/agent/executor.d.ts +0 -1
  25. package/dist/agent/executor.js +0 -1
  26. package/dist/agent/index.d.ts +0 -1
  27. package/dist/agent/index.js +0 -1
  28. package/dist/agent/interactive-step.d.ts +0 -1
  29. package/dist/agent/interactive-step.js +0 -1
  30. package/dist/agent/invocation.d.ts +0 -1
  31. package/dist/agent/invocation.js +10 -5
  32. package/dist/agent/ledger.d.ts +0 -1
  33. package/dist/agent/ledger.js +0 -1
  34. package/dist/agent/loop-guards.d.ts +0 -1
  35. package/dist/agent/loop-guards.js +0 -1
  36. package/dist/agent/model/adapter.d.ts +0 -1
  37. package/dist/agent/model/adapter.js +0 -1
  38. package/dist/agent/model/overflow.d.ts +0 -1
  39. package/dist/agent/model/overflow.js +0 -1
  40. package/dist/agent/model/provider-hints.d.ts +0 -1
  41. package/dist/agent/model/provider-hints.js +0 -1
  42. package/dist/agent/model/schema.d.ts +0 -1
  43. package/dist/agent/model/schema.js +0 -1
  44. package/dist/agent/model/sdk.d.ts +0 -1
  45. package/dist/agent/model/sdk.js +2 -1
  46. package/dist/agent/model/stall.d.ts +0 -1
  47. package/dist/agent/model/stall.js +0 -1
  48. package/dist/agent/model/tool-choice.d.ts +0 -1
  49. package/dist/agent/model/tool-choice.js +0 -1
  50. package/dist/agent/observation-budget.d.ts +0 -1
  51. package/dist/agent/observation-budget.js +0 -1
  52. package/dist/agent/observation-feed.d.ts +5 -7
  53. package/dist/agent/observation-feed.js +5 -8
  54. package/dist/agent/observation.d.ts +40 -12
  55. package/dist/agent/observation.js +109 -60
  56. package/dist/agent/operation-queue.d.ts +0 -1
  57. package/dist/agent/operation-queue.js +0 -1
  58. package/dist/agent/phases.d.ts +0 -1
  59. package/dist/agent/phases.js +0 -1
  60. package/dist/agent/pixels.d.ts +0 -1
  61. package/dist/agent/pixels.js +0 -1
  62. package/dist/agent/point-tap.d.ts +8 -9
  63. package/dist/agent/point-tap.js +1 -2
  64. package/dist/agent/primitives.d.ts +6 -1
  65. package/dist/agent/primitives.js +4 -2
  66. package/dist/agent/prompts.d.ts +0 -1
  67. package/dist/agent/prompts.js +0 -1
  68. package/dist/agent/protocol.d.ts +0 -1
  69. package/dist/agent/protocol.js +0 -1
  70. package/dist/agent/public.d.ts +0 -1
  71. package/dist/agent/public.js +0 -1
  72. package/dist/agent/reading.d.ts +0 -1
  73. package/dist/agent/reading.js +0 -1
  74. package/dist/agent/replay.d.ts +19 -9
  75. package/dist/agent/replay.js +11 -15
  76. package/dist/agent/screen-update.d.ts +0 -1
  77. package/dist/agent/screen-update.js +0 -1
  78. package/dist/agent/scroll-target.d.ts +2 -4
  79. package/dist/agent/scroll-target.js +0 -1
  80. package/dist/agent/secrets.d.ts +0 -1
  81. package/dist/agent/secrets.js +0 -1
  82. package/dist/agent/settle-policy.d.ts +0 -1
  83. package/dist/agent/settle-policy.js +0 -1
  84. package/dist/agent/step-accounting.d.ts +0 -1
  85. package/dist/agent/step-accounting.js +0 -1
  86. package/dist/agent/step-cache.d.ts +41 -15
  87. package/dist/agent/step-cache.js +147 -63
  88. package/dist/agent/tool-loop.d.ts +0 -1
  89. package/dist/agent/tool-loop.js +2 -1
  90. package/dist/agent/tool-output.d.ts +0 -1
  91. package/dist/agent/tool-output.js +0 -1
  92. package/dist/agent/tool.d.ts +0 -1
  93. package/dist/agent/tool.js +0 -1
  94. package/dist/agent/transcript-compaction.d.ts +0 -1
  95. package/dist/agent/transcript-compaction.js +0 -1
  96. package/dist/agent/upload-paths.d.ts +0 -1
  97. package/dist/agent/upload-paths.js +0 -1
  98. package/dist/agent/usage.d.ts +0 -1
  99. package/dist/agent/usage.js +0 -1
  100. package/dist/cache/anchors.d.ts +72 -24
  101. package/dist/cache/anchors.js +233 -61
  102. package/dist/cache/context.d.ts +25 -15
  103. package/dist/cache/context.js +50 -9
  104. package/dist/cache/decide.d.ts +2 -3
  105. package/dist/cache/decide.js +4 -7
  106. package/dist/cache/identity.d.ts +18 -5
  107. package/dist/cache/identity.js +9 -5
  108. package/dist/cache/recorder.d.ts +15 -2
  109. package/dist/cache/recorder.js +36 -24
  110. package/dist/cache/rekeyed.d.ts +46 -0
  111. package/dist/cache/rekeyed.js +89 -0
  112. package/dist/cache/relocate.d.ts +14 -15
  113. package/dist/cache/relocate.js +33 -26
  114. package/dist/cache/route.d.ts +32 -34
  115. package/dist/cache/route.js +94 -51
  116. package/dist/cache/store.d.ts +6 -1
  117. package/dist/cache/store.js +21 -2
  118. package/dist/cache/template.d.ts +0 -1
  119. package/dist/cache/template.js +0 -1
  120. package/dist/cache/trace.d.ts +53 -15
  121. package/dist/cache/trace.js +70 -29
  122. package/dist/cli/bin.d.ts +0 -1
  123. package/dist/cli/bin.js +0 -1
  124. package/dist/cli/cache.d.ts +0 -1
  125. package/dist/cli/cache.js +0 -1
  126. package/dist/cli/docs-url.d.ts +0 -1
  127. package/dist/cli/docs-url.js +0 -1
  128. package/dist/cli/feedback.d.ts +0 -1
  129. package/dist/cli/feedback.js +0 -1
  130. package/dist/cli/guide.d.ts +0 -1
  131. package/dist/cli/guide.js +0 -1
  132. package/dist/cli/index.d.ts +0 -1
  133. package/dist/cli/index.js +10 -11
  134. package/dist/cli/init/agent-skill.d.ts +0 -1
  135. package/dist/cli/init/agent-skill.js +0 -1
  136. package/dist/cli/init/engines.d.ts +1 -4
  137. package/dist/cli/init/engines.js +2 -3
  138. package/dist/cli/init/gateways.d.ts +1 -2
  139. package/dist/cli/init/gateways.js +11 -2
  140. package/dist/cli/init/mcp-config.d.ts +0 -1
  141. package/dist/cli/init/mcp-config.js +0 -1
  142. package/dist/cli/init/package.d.ts +0 -1
  143. package/dist/cli/init/package.js +0 -1
  144. package/dist/cli/init/scaffold.d.ts +0 -1
  145. package/dist/cli/init/scaffold.js +0 -1
  146. package/dist/cli/init/sibling-versions.json +1 -1
  147. package/dist/cli/init/versions.d.ts +0 -9
  148. package/dist/cli/init/versions.js +1 -11
  149. package/dist/cli/init.d.ts +0 -1
  150. package/dist/cli/init.js +0 -1
  151. package/dist/cli/mcp.d.ts +9 -2
  152. package/dist/cli/mcp.js +14 -2
  153. package/dist/cli/signals.d.ts +0 -1
  154. package/dist/cli/signals.js +0 -1
  155. package/dist/cli/skill.d.ts +0 -1
  156. package/dist/cli/skill.js +0 -1
  157. package/dist/cli/telemetry.d.ts +0 -1
  158. package/dist/cli/telemetry.js +1 -2
  159. package/dist/cli/wordmark.d.ts +0 -1
  160. package/dist/cli/wordmark.js +0 -1
  161. package/dist/collect/collect.d.ts +0 -1
  162. package/dist/collect/collect.js +3 -2
  163. package/dist/collect/registry.d.ts +6 -3
  164. package/dist/collect/registry.js +31 -14
  165. package/dist/collect/select.d.ts +0 -1
  166. package/dist/collect/select.js +0 -1
  167. package/dist/config/agent.d.ts +0 -1
  168. package/dist/config/agent.js +0 -1
  169. package/dist/config/app.d.ts +0 -1
  170. package/dist/config/app.js +0 -1
  171. package/dist/config/command.d.ts +0 -1
  172. package/dist/config/command.js +0 -1
  173. package/dist/config/diagnose.d.ts +0 -1
  174. package/dist/config/diagnose.js +0 -1
  175. package/dist/config/esm-hooks.d.ts +0 -1
  176. package/dist/config/esm-hooks.js +0 -1
  177. package/dist/config/load.d.ts +0 -1
  178. package/dist/config/load.js +0 -1
  179. package/dist/config/resolve.d.ts +1 -1
  180. package/dist/config/resolve.js +33 -2
  181. package/dist/config/secrets.d.ts +0 -1
  182. package/dist/config/secrets.js +0 -1
  183. package/dist/config/targets.d.ts +0 -1
  184. package/dist/config/targets.js +0 -1
  185. package/dist/config/validate.d.ts +0 -1
  186. package/dist/config/validate.js +0 -1
  187. package/dist/engine/contract.d.ts +0 -1
  188. package/dist/engine/contract.js +0 -1
  189. package/dist/engine/index.d.ts +3 -4
  190. package/dist/engine/index.js +4 -4
  191. package/dist/engine/manifest.d.ts +0 -1
  192. package/dist/engine/manifest.js +0 -1
  193. package/dist/engine/recording.d.ts +0 -1
  194. package/dist/engine/recording.js +0 -1
  195. package/dist/engine/resolve.d.ts +0 -1
  196. package/dist/engine/resolve.js +0 -1
  197. package/dist/engine/session.d.ts +0 -1
  198. package/dist/engine/session.js +0 -1
  199. package/dist/engine/surface.d.ts +0 -1
  200. package/dist/engine/surface.js +0 -1
  201. package/dist/engine/timing.d.ts +0 -1
  202. package/dist/engine/timing.js +0 -1
  203. package/dist/expect/async.d.ts +0 -1
  204. package/dist/expect/async.js +101 -59
  205. package/dist/expect/attempt.d.ts +0 -1
  206. package/dist/expect/attempt.js +0 -1
  207. package/dist/expect/index.d.ts +0 -1
  208. package/dist/expect/index.js +0 -1
  209. package/dist/expect/poll-scope.d.ts +52 -0
  210. package/dist/expect/poll-scope.js +113 -0
  211. package/dist/expect/poll.d.ts +0 -1
  212. package/dist/expect/poll.js +31 -5
  213. package/dist/expect/soft.d.ts +0 -1
  214. package/dist/expect/soft.js +0 -1
  215. package/dist/expect/values.d.ts +0 -1
  216. package/dist/expect/values.js +11 -5
  217. package/dist/explore/body.d.ts +0 -1
  218. package/dist/explore/body.js +0 -1
  219. package/dist/explore/executor.d.ts +0 -1
  220. package/dist/explore/executor.js +0 -1
  221. package/dist/explore/index.d.ts +0 -1
  222. package/dist/explore/index.js +16 -2
  223. package/dist/explore/plan.d.ts +0 -1
  224. package/dist/explore/plan.js +0 -1
  225. package/dist/explore/progress.d.ts +0 -1
  226. package/dist/explore/progress.js +0 -1
  227. package/dist/explore/state.d.ts +0 -1
  228. package/dist/explore/state.js +0 -1
  229. package/dist/index.d.ts +0 -1
  230. package/dist/index.js +0 -1
  231. package/dist/internal/abandoned.d.ts +11 -0
  232. package/dist/internal/abandoned.js +23 -0
  233. package/dist/internal/ai-trace.d.ts +0 -1
  234. package/dist/internal/ai-trace.js +0 -1
  235. package/dist/internal/atomic-write.d.ts +0 -1
  236. package/dist/internal/atomic-write.js +0 -1
  237. package/dist/internal/brands.d.ts +2 -1
  238. package/dist/internal/brands.js +2 -1
  239. package/dist/internal/client-identity.d.ts +9 -0
  240. package/dist/internal/client-identity.js +14 -0
  241. package/dist/internal/debug.d.ts +0 -1
  242. package/dist/internal/debug.js +0 -1
  243. package/dist/internal/env.d.ts +0 -1
  244. package/dist/internal/env.js +0 -1
  245. package/dist/internal/errors.d.ts +0 -1
  246. package/dist/internal/errors.js +0 -1
  247. package/dist/internal/geometry.d.ts +0 -1
  248. package/dist/internal/geometry.js +0 -1
  249. package/dist/internal/git.d.ts +0 -1
  250. package/dist/internal/git.js +0 -1
  251. package/dist/internal/globs.d.ts +0 -1
  252. package/dist/internal/globs.js +0 -1
  253. package/dist/internal/ids.d.ts +0 -1
  254. package/dist/internal/ids.js +0 -1
  255. package/dist/internal/json-value.d.ts +0 -1
  256. package/dist/internal/json-value.js +0 -1
  257. package/dist/internal/keys.d.ts +0 -1
  258. package/dist/internal/keys.js +0 -1
  259. package/dist/internal/node-version.d.ts +0 -1
  260. package/dist/internal/node-version.js +0 -1
  261. package/dist/internal/objects.d.ts +0 -1
  262. package/dist/internal/objects.js +0 -1
  263. package/dist/internal/options.d.ts +0 -1
  264. package/dist/internal/options.js +0 -1
  265. package/dist/internal/package-manager.d.ts +0 -1
  266. package/dist/internal/package-manager.js +0 -1
  267. package/dist/internal/package-version.d.ts +0 -1
  268. package/dist/internal/package-version.js +0 -1
  269. package/dist/internal/paths.d.ts +0 -1
  270. package/dist/internal/paths.js +0 -1
  271. package/dist/internal/realm-slot.d.ts +0 -1
  272. package/dist/internal/realm-slot.js +0 -1
  273. package/dist/internal/recording-modes.d.ts +0 -1
  274. package/dist/internal/recording-modes.js +0 -1
  275. package/dist/internal/redact.d.ts +7 -5
  276. package/dist/internal/redact.js +116 -24
  277. package/dist/internal/regexp.d.ts +0 -1
  278. package/dist/internal/regexp.js +0 -1
  279. package/dist/internal/roles.d.ts +0 -1
  280. package/dist/internal/roles.js +0 -1
  281. package/dist/internal/skip.d.ts +0 -1
  282. package/dist/internal/skip.js +0 -1
  283. package/dist/internal/source.d.ts +0 -1
  284. package/dist/internal/source.js +0 -1
  285. package/dist/internal/standard-schema.d.ts +0 -1
  286. package/dist/internal/standard-schema.js +0 -1
  287. package/dist/internal/suggest.d.ts +0 -1
  288. package/dist/internal/suggest.js +0 -1
  289. package/dist/internal/text.d.ts +8 -1
  290. package/dist/internal/text.js +13 -2
  291. package/dist/internal/time.d.ts +6 -1
  292. package/dist/internal/time.js +25 -14
  293. package/dist/internal/urls.d.ts +9 -6
  294. package/dist/internal/urls.js +19 -11
  295. package/dist/internal/vcs.d.ts +0 -1
  296. package/dist/internal/vcs.js +0 -1
  297. package/dist/internal/zip.d.ts +0 -1
  298. package/dist/internal/zip.js +0 -1
  299. package/dist/locator/engine.d.ts +12 -3
  300. package/dist/locator/engine.js +8 -4
  301. package/dist/locator/expression.d.ts +0 -1
  302. package/dist/locator/expression.js +0 -1
  303. package/dist/locator/screen.d.ts +0 -1
  304. package/dist/locator/screen.js +28 -5
  305. package/dist/mcp/catalog.d.ts +7 -3
  306. package/dist/mcp/catalog.js +8 -9
  307. package/dist/mcp/config.d.ts +0 -1
  308. package/dist/mcp/config.js +0 -1
  309. package/dist/mcp/recording.d.ts +0 -1
  310. package/dist/mcp/recording.js +0 -1
  311. package/dist/mcp/server.d.ts +8 -1
  312. package/dist/mcp/server.js +8 -5
  313. package/dist/mcp/session.d.ts +4 -2
  314. package/dist/mcp/session.js +44 -22
  315. package/dist/mcp/sessions.d.ts +2 -1
  316. package/dist/mcp/sessions.js +5 -2
  317. package/dist/mcp/tools.d.ts +7 -6
  318. package/dist/mcp/tools.js +36 -11
  319. package/dist/mcp/usage.d.ts +61 -0
  320. package/dist/mcp/usage.js +73 -0
  321. package/dist/oauth/callback-server.d.ts +0 -1
  322. package/dist/oauth/callback-server.js +0 -1
  323. package/dist/oauth/chatgpt.d.ts +0 -1
  324. package/dist/oauth/chatgpt.js +3 -24
  325. package/dist/oauth/cli.d.ts +0 -1
  326. package/dist/oauth/cli.js +1 -1
  327. package/dist/oauth/copilot.d.ts +5 -5
  328. package/dist/oauth/copilot.js +80 -8
  329. package/dist/oauth/device-code.d.ts +0 -1
  330. package/dist/oauth/device-code.js +0 -1
  331. package/dist/oauth/errors.d.ts +0 -1
  332. package/dist/oauth/errors.js +0 -1
  333. package/dist/oauth/fetch.d.ts +0 -1
  334. package/dist/oauth/fetch.js +0 -1
  335. package/dist/oauth/grok.d.ts +0 -1
  336. package/dist/oauth/grok.js +2 -2
  337. package/dist/oauth/jwt.d.ts +0 -1
  338. package/dist/oauth/jwt.js +0 -1
  339. package/dist/oauth/login.d.ts +0 -1
  340. package/dist/oauth/login.js +0 -1
  341. package/dist/oauth/models.d.ts +0 -1
  342. package/dist/oauth/models.js +2 -2
  343. package/dist/oauth/opencode-console.d.ts +10 -0
  344. package/dist/oauth/opencode-console.js +133 -0
  345. package/dist/oauth/pkce.d.ts +0 -1
  346. package/dist/oauth/pkce.js +0 -1
  347. package/dist/oauth/providers/github-copilot.d.ts +12 -1
  348. package/dist/oauth/providers/github-copilot.js +80 -19
  349. package/dist/oauth/providers/openai.d.ts +0 -1
  350. package/dist/oauth/providers/openai.js +1 -2
  351. package/dist/oauth/providers/opencode-console.d.ts +31 -0
  352. package/dist/oauth/providers/opencode-console.js +148 -0
  353. package/dist/oauth/providers/xai.d.ts +0 -1
  354. package/dist/oauth/providers/xai.js +0 -1
  355. package/dist/oauth/providers.d.ts +2 -7
  356. package/dist/oauth/providers.js +3 -8
  357. package/dist/oauth/responses.d.ts +9 -0
  358. package/dist/oauth/responses.js +23 -0
  359. package/dist/oauth/sse.d.ts +0 -1
  360. package/dist/oauth/sse.js +0 -1
  361. package/dist/oauth/store.d.ts +0 -1
  362. package/dist/oauth/store.js +0 -1
  363. package/dist/oauth/token-endpoint.d.ts +0 -1
  364. package/dist/oauth/token-endpoint.js +0 -1
  365. package/dist/oauth/types.d.ts +0 -1
  366. package/dist/oauth/types.js +0 -1
  367. package/dist/params.d.ts +0 -1
  368. package/dist/params.js +0 -1
  369. package/dist/report/build.d.ts +26 -1
  370. package/dist/report/build.js +16 -9
  371. package/dist/report/builtin.d.ts +0 -1
  372. package/dist/report/builtin.js +0 -1
  373. package/dist/report/code-frame.d.ts +0 -1
  374. package/dist/report/code-frame.js +0 -1
  375. package/dist/report/debug-steps.d.ts +0 -1
  376. package/dist/report/debug-steps.js +0 -1
  377. package/dist/report/explore-text.d.ts +0 -1
  378. package/dist/report/explore-text.js +0 -1
  379. package/dist/report/failure-text.d.ts +6 -2
  380. package/dist/report/failure-text.js +14 -5
  381. package/dist/report/format.d.ts +10 -6
  382. package/dist/report/format.js +12 -6
  383. package/dist/report/json.d.ts +0 -1
  384. package/dist/report/json.js +0 -1
  385. package/dist/report/junit.d.ts +0 -1
  386. package/dist/report/junit.js +11 -13
  387. package/dist/report/list-explore.d.ts +0 -1
  388. package/dist/report/list-explore.js +0 -1
  389. package/dist/report/list-model.d.ts +0 -1
  390. package/dist/report/list-model.js +0 -1
  391. package/dist/report/list-steps.d.ts +0 -1
  392. package/dist/report/list-steps.js +0 -1
  393. package/dist/report/list.d.ts +1 -1
  394. package/dist/report/list.js +38 -19
  395. package/dist/report/live-window.d.ts +0 -1
  396. package/dist/report/live-window.js +0 -1
  397. package/dist/report/markdown-text.d.ts +0 -1
  398. package/dist/report/markdown-text.js +0 -1
  399. package/dist/report/markdown.d.ts +1 -2
  400. package/dist/report/markdown.js +37 -15
  401. package/dist/report/outcome.d.ts +0 -1
  402. package/dist/report/outcome.js +0 -1
  403. package/dist/report/repeats.d.ts +6 -2
  404. package/dist/report/repeats.js +12 -4
  405. package/dist/report/running-tree.d.ts +0 -1
  406. package/dist/report/running-tree.js +0 -1
  407. package/dist/report/write.d.ts +0 -1
  408. package/dist/report/write.js +0 -1
  409. package/dist/run/app-ports.d.ts +0 -1
  410. package/dist/run/app-ports.js +0 -1
  411. package/dist/run/artifacts.d.ts +18 -1
  412. package/dist/run/artifacts.js +68 -2
  413. package/dist/run/budget.d.ts +0 -1
  414. package/dist/run/budget.js +0 -1
  415. package/dist/run/declared-processes.d.ts +0 -1
  416. package/dist/run/declared-processes.js +0 -1
  417. package/dist/run/events.d.ts +0 -1
  418. package/dist/run/events.js +0 -1
  419. package/dist/run/execute.d.ts +9 -1
  420. package/dist/run/execute.js +55 -29
  421. package/dist/run/extended-fixtures.d.ts +0 -1
  422. package/dist/run/extended-fixtures.js +6 -3
  423. package/dist/run/failure-evidence.d.ts +0 -1
  424. package/dist/run/failure-evidence.js +4 -3
  425. package/dist/run/fixture-recording.d.ts +0 -1
  426. package/dist/run/fixture-recording.js +0 -1
  427. package/dist/run/fixtures.d.ts +0 -1
  428. package/dist/run/fixtures.js +6 -9
  429. package/dist/run/in-process.d.ts +2 -1
  430. package/dist/run/in-process.js +1 -1
  431. package/dist/run/last-run.d.ts +42 -9
  432. package/dist/run/last-run.js +121 -15
  433. package/dist/run/managed-process.d.ts +0 -1
  434. package/dist/run/managed-process.js +0 -1
  435. package/dist/run/output.d.ts +0 -1
  436. package/dist/run/output.js +0 -1
  437. package/dist/run/process-pool.d.ts +0 -1
  438. package/dist/run/process-pool.js +0 -1
  439. package/dist/run/provision.d.ts +0 -1
  440. package/dist/run/provision.js +0 -1
  441. package/dist/run/realm.d.ts +6 -2
  442. package/dist/run/realm.js +21 -8
  443. package/dist/run/records.d.ts +16 -1
  444. package/dist/run/records.js +26 -1
  445. package/dist/run/retry.d.ts +3 -2
  446. package/dist/run/retry.js +4 -3
  447. package/dist/run/runner.d.ts +3 -2
  448. package/dist/run/runner.js +70 -32
  449. package/dist/run/scheduler.d.ts +0 -1
  450. package/dist/run/scheduler.js +0 -1
  451. package/dist/run/secrecy.d.ts +15 -1
  452. package/dist/run/secrecy.js +27 -2
  453. package/dist/run/serial.d.ts +2 -1
  454. package/dist/run/serial.js +8 -6
  455. package/dist/run/sessions.d.ts +0 -1
  456. package/dist/run/sessions.js +0 -1
  457. package/dist/run/standalone.d.ts +0 -1
  458. package/dist/run/standalone.js +3 -3
  459. package/dist/run/steps.d.ts +2 -9
  460. package/dist/run/steps.js +7 -22
  461. package/dist/run/trace-redaction.d.ts +0 -1
  462. package/dist/run/trace-redaction.js +0 -1
  463. package/dist/run/unit-runner.d.ts +0 -1
  464. package/dist/run/unit-runner.js +0 -1
  465. package/dist/run/units.d.ts +0 -1
  466. package/dist/run/units.js +0 -1
  467. package/dist/run/worker/entry.d.ts +0 -1
  468. package/dist/run/worker/entry.js +7 -7
  469. package/dist/run/worker/handle.d.ts +0 -1
  470. package/dist/run/worker/handle.js +0 -1
  471. package/dist/run/worker/protocol.d.ts +2 -1
  472. package/dist/run/worker/protocol.js +0 -1
  473. package/dist/run/worker/session.d.ts +2 -1
  474. package/dist/run/worker/session.js +1 -1
  475. package/dist/run/worker-models.d.ts +0 -1
  476. package/dist/run/worker-models.js +0 -1
  477. package/dist/secrets.d.ts +0 -1
  478. package/dist/secrets.js +0 -1
  479. package/dist/telemetry/checkout.d.ts +0 -1
  480. package/dist/telemetry/checkout.js +0 -1
  481. package/dist/telemetry/environment.d.ts +0 -1
  482. package/dist/telemetry/environment.js +0 -1
  483. package/dist/telemetry/events.d.ts +26 -10
  484. package/dist/telemetry/events.js +108 -13
  485. package/dist/telemetry/failure-kind.d.ts +0 -1
  486. package/dist/telemetry/failure-kind.js +0 -1
  487. package/dist/telemetry/posthog.d.ts +0 -1
  488. package/dist/telemetry/posthog.js +0 -1
  489. package/dist/telemetry/project.d.ts +0 -1
  490. package/dist/telemetry/project.js +0 -1
  491. package/dist/telemetry/store.d.ts +0 -1
  492. package/dist/telemetry/store.js +0 -1
  493. package/dist/telemetry/telemetry.d.ts +19 -8
  494. package/dist/telemetry/telemetry.js +26 -9
  495. package/dist/telemetry/token.d.ts +0 -1
  496. package/dist/telemetry/token.js +0 -1
  497. package/dist/types.d.ts +34 -26
  498. package/dist/types.js +0 -1
  499. package/docs/agents.mdx +6 -3
  500. package/docs/assertions.mdx +94 -0
  501. package/docs/authentication.mdx +3 -1
  502. package/docs/browser.mdx +42 -6
  503. package/docs/cache.mdx +64 -18
  504. package/docs/ci.mdx +11 -7
  505. package/docs/debugging.mdx +6 -3
  506. package/docs/executors.mdx +5 -3
  507. package/docs/github.mdx +12 -4
  508. package/docs/{writing-tests.mdx → goals.mdx} +21 -101
  509. package/docs/index.mdx +4 -4
  510. package/docs/integrations/kernel.mdx +1 -1
  511. package/docs/locators.mdx +64 -0
  512. package/docs/migrate/cypress.mdx +2 -2
  513. package/docs/migrate/maestro.mdx +2 -2
  514. package/docs/migrate/playwright.mdx +22 -16
  515. package/docs/migrate/selenium.mdx +2 -2
  516. package/docs/mobile.mdx +61 -4
  517. package/docs/models.mdx +53 -7
  518. package/docs/physical-devices.mdx +76 -0
  519. package/docs/quickstart.mdx +4 -3
  520. package/docs/reference/app.mdx +1 -1
  521. package/docs/reference/cli.mdx +30 -11
  522. package/docs/reference/config.mdx +25 -7
  523. package/docs/reference/engine.mdx +4 -3
  524. package/docs/reference/environment.mdx +8 -1
  525. package/docs/reference/errors.mdx +5 -5
  526. package/docs/reference/expect.mdx +79 -24
  527. package/docs/reference/mcp.mdx +3 -0
  528. package/docs/reference/mobile.mdx +23 -13
  529. package/docs/reference/reporters.mdx +8 -2
  530. package/docs/reference/screen.mdx +30 -7
  531. package/docs/reference/test.mdx +11 -4
  532. package/docs/reference/web.mdx +131 -23
  533. package/docs/security.mdx +45 -19
  534. package/docs/subscriptions.mdx +97 -9
  535. package/docs/telemetry.mdx +48 -6
  536. package/package.json +18 -4
  537. package/schema/report-v1.schema.json +14 -1
  538. package/skills/e2e/SKILL.md +2 -2
  539. package/skills/e2e/references/agent.md +22 -11
  540. package/skills/e2e/references/debugging.md +4 -4
  541. package/skills/e2e/references/mcp.md +3 -0
  542. package/skills/e2e/references/running.md +13 -8
  543. package/skills/e2e/references/setup.md +42 -15
  544. package/skills/e2e/references/writing-tests.md +43 -15
  545. package/dist/agent/act-validation.d.ts.map +0 -1
  546. package/dist/agent/act-validation.js.map +0 -1
  547. package/dist/agent/act.d.ts.map +0 -1
  548. package/dist/agent/act.js.map +0 -1
  549. package/dist/agent/action-dispatcher.d.ts.map +0 -1
  550. package/dist/agent/action-dispatcher.js.map +0 -1
  551. package/dist/agent/action-names.d.ts.map +0 -1
  552. package/dist/agent/action-names.js.map +0 -1
  553. package/dist/agent/actions.d.ts.map +0 -1
  554. package/dist/agent/actions.js.map +0 -1
  555. package/dist/agent/agent-brand.d.ts.map +0 -1
  556. package/dist/agent/agent-brand.js.map +0 -1
  557. package/dist/agent/ai-sdk.d.ts.map +0 -1
  558. package/dist/agent/ai-sdk.js.map +0 -1
  559. package/dist/agent/call-options.d.ts.map +0 -1
  560. package/dist/agent/call-options.js.map +0 -1
  561. package/dist/agent/default-agent.d.ts.map +0 -1
  562. package/dist/agent/default-agent.js.map +0 -1
  563. package/dist/agent/derived.d.ts.map +0 -1
  564. package/dist/agent/derived.js.map +0 -1
  565. package/dist/agent/error.d.ts.map +0 -1
  566. package/dist/agent/error.js.map +0 -1
  567. package/dist/agent/executor.d.ts.map +0 -1
  568. package/dist/agent/executor.js.map +0 -1
  569. package/dist/agent/index.d.ts.map +0 -1
  570. package/dist/agent/index.js.map +0 -1
  571. package/dist/agent/interactive-step.d.ts.map +0 -1
  572. package/dist/agent/interactive-step.js.map +0 -1
  573. package/dist/agent/invocation.d.ts.map +0 -1
  574. package/dist/agent/invocation.js.map +0 -1
  575. package/dist/agent/ledger.d.ts.map +0 -1
  576. package/dist/agent/ledger.js.map +0 -1
  577. package/dist/agent/loop-guards.d.ts.map +0 -1
  578. package/dist/agent/loop-guards.js.map +0 -1
  579. package/dist/agent/model/adapter.d.ts.map +0 -1
  580. package/dist/agent/model/adapter.js.map +0 -1
  581. package/dist/agent/model/overflow.d.ts.map +0 -1
  582. package/dist/agent/model/overflow.js.map +0 -1
  583. package/dist/agent/model/provider-hints.d.ts.map +0 -1
  584. package/dist/agent/model/provider-hints.js.map +0 -1
  585. package/dist/agent/model/schema.d.ts.map +0 -1
  586. package/dist/agent/model/schema.js.map +0 -1
  587. package/dist/agent/model/sdk.d.ts.map +0 -1
  588. package/dist/agent/model/sdk.js.map +0 -1
  589. package/dist/agent/model/stall.d.ts.map +0 -1
  590. package/dist/agent/model/stall.js.map +0 -1
  591. package/dist/agent/model/tool-choice.d.ts.map +0 -1
  592. package/dist/agent/model/tool-choice.js.map +0 -1
  593. package/dist/agent/observation-budget.d.ts.map +0 -1
  594. package/dist/agent/observation-budget.js.map +0 -1
  595. package/dist/agent/observation-feed.d.ts.map +0 -1
  596. package/dist/agent/observation-feed.js.map +0 -1
  597. package/dist/agent/observation.d.ts.map +0 -1
  598. package/dist/agent/observation.js.map +0 -1
  599. package/dist/agent/operation-queue.d.ts.map +0 -1
  600. package/dist/agent/operation-queue.js.map +0 -1
  601. package/dist/agent/phases.d.ts.map +0 -1
  602. package/dist/agent/phases.js.map +0 -1
  603. package/dist/agent/pixels.d.ts.map +0 -1
  604. package/dist/agent/pixels.js.map +0 -1
  605. package/dist/agent/point-tap.d.ts.map +0 -1
  606. package/dist/agent/point-tap.js.map +0 -1
  607. package/dist/agent/primitives.d.ts.map +0 -1
  608. package/dist/agent/primitives.js.map +0 -1
  609. package/dist/agent/prompts.d.ts.map +0 -1
  610. package/dist/agent/prompts.js.map +0 -1
  611. package/dist/agent/protocol.d.ts.map +0 -1
  612. package/dist/agent/protocol.js.map +0 -1
  613. package/dist/agent/public.d.ts.map +0 -1
  614. package/dist/agent/public.js.map +0 -1
  615. package/dist/agent/reading.d.ts.map +0 -1
  616. package/dist/agent/reading.js.map +0 -1
  617. package/dist/agent/replay.d.ts.map +0 -1
  618. package/dist/agent/replay.js.map +0 -1
  619. package/dist/agent/screen-update.d.ts.map +0 -1
  620. package/dist/agent/screen-update.js.map +0 -1
  621. package/dist/agent/scroll-target.d.ts.map +0 -1
  622. package/dist/agent/scroll-target.js.map +0 -1
  623. package/dist/agent/secrets.d.ts.map +0 -1
  624. package/dist/agent/secrets.js.map +0 -1
  625. package/dist/agent/settle-policy.d.ts.map +0 -1
  626. package/dist/agent/settle-policy.js.map +0 -1
  627. package/dist/agent/step-accounting.d.ts.map +0 -1
  628. package/dist/agent/step-accounting.js.map +0 -1
  629. package/dist/agent/step-cache.d.ts.map +0 -1
  630. package/dist/agent/step-cache.js.map +0 -1
  631. package/dist/agent/tool-loop.d.ts.map +0 -1
  632. package/dist/agent/tool-loop.js.map +0 -1
  633. package/dist/agent/tool-output.d.ts.map +0 -1
  634. package/dist/agent/tool-output.js.map +0 -1
  635. package/dist/agent/tool.d.ts.map +0 -1
  636. package/dist/agent/tool.js.map +0 -1
  637. package/dist/agent/transcript-compaction.d.ts.map +0 -1
  638. package/dist/agent/transcript-compaction.js.map +0 -1
  639. package/dist/agent/upload-paths.d.ts.map +0 -1
  640. package/dist/agent/upload-paths.js.map +0 -1
  641. package/dist/agent/usage.d.ts.map +0 -1
  642. package/dist/agent/usage.js.map +0 -1
  643. package/dist/cache/anchors.d.ts.map +0 -1
  644. package/dist/cache/anchors.js.map +0 -1
  645. package/dist/cache/context.d.ts.map +0 -1
  646. package/dist/cache/context.js.map +0 -1
  647. package/dist/cache/decide.d.ts.map +0 -1
  648. package/dist/cache/decide.js.map +0 -1
  649. package/dist/cache/identity.d.ts.map +0 -1
  650. package/dist/cache/identity.js.map +0 -1
  651. package/dist/cache/recorder.d.ts.map +0 -1
  652. package/dist/cache/recorder.js.map +0 -1
  653. package/dist/cache/relocate.d.ts.map +0 -1
  654. package/dist/cache/relocate.js.map +0 -1
  655. package/dist/cache/route.d.ts.map +0 -1
  656. package/dist/cache/route.js.map +0 -1
  657. package/dist/cache/store.d.ts.map +0 -1
  658. package/dist/cache/store.js.map +0 -1
  659. package/dist/cache/template.d.ts.map +0 -1
  660. package/dist/cache/template.js.map +0 -1
  661. package/dist/cache/trace.d.ts.map +0 -1
  662. package/dist/cache/trace.js.map +0 -1
  663. package/dist/cli/bin.d.ts.map +0 -1
  664. package/dist/cli/bin.js.map +0 -1
  665. package/dist/cli/cache.d.ts.map +0 -1
  666. package/dist/cli/cache.js.map +0 -1
  667. package/dist/cli/docs-url.d.ts.map +0 -1
  668. package/dist/cli/docs-url.js.map +0 -1
  669. package/dist/cli/feedback.d.ts.map +0 -1
  670. package/dist/cli/feedback.js.map +0 -1
  671. package/dist/cli/guide.d.ts.map +0 -1
  672. package/dist/cli/guide.js.map +0 -1
  673. package/dist/cli/index.d.ts.map +0 -1
  674. package/dist/cli/index.js.map +0 -1
  675. package/dist/cli/init/agent-skill.d.ts.map +0 -1
  676. package/dist/cli/init/agent-skill.js.map +0 -1
  677. package/dist/cli/init/engines.d.ts.map +0 -1
  678. package/dist/cli/init/engines.js.map +0 -1
  679. package/dist/cli/init/gateways.d.ts.map +0 -1
  680. package/dist/cli/init/gateways.js.map +0 -1
  681. package/dist/cli/init/mcp-config.d.ts.map +0 -1
  682. package/dist/cli/init/mcp-config.js.map +0 -1
  683. package/dist/cli/init/package.d.ts.map +0 -1
  684. package/dist/cli/init/package.js.map +0 -1
  685. package/dist/cli/init/scaffold.d.ts.map +0 -1
  686. package/dist/cli/init/scaffold.js.map +0 -1
  687. package/dist/cli/init/versions.d.ts.map +0 -1
  688. package/dist/cli/init/versions.js.map +0 -1
  689. package/dist/cli/init.d.ts.map +0 -1
  690. package/dist/cli/init.js.map +0 -1
  691. package/dist/cli/mcp.d.ts.map +0 -1
  692. package/dist/cli/mcp.js.map +0 -1
  693. package/dist/cli/signals.d.ts.map +0 -1
  694. package/dist/cli/signals.js.map +0 -1
  695. package/dist/cli/skill.d.ts.map +0 -1
  696. package/dist/cli/skill.js.map +0 -1
  697. package/dist/cli/telemetry.d.ts.map +0 -1
  698. package/dist/cli/telemetry.js.map +0 -1
  699. package/dist/cli/wordmark.d.ts.map +0 -1
  700. package/dist/cli/wordmark.js.map +0 -1
  701. package/dist/collect/collect.d.ts.map +0 -1
  702. package/dist/collect/collect.js.map +0 -1
  703. package/dist/collect/registry.d.ts.map +0 -1
  704. package/dist/collect/registry.js.map +0 -1
  705. package/dist/collect/select.d.ts.map +0 -1
  706. package/dist/collect/select.js.map +0 -1
  707. package/dist/config/agent.d.ts.map +0 -1
  708. package/dist/config/agent.js.map +0 -1
  709. package/dist/config/app.d.ts.map +0 -1
  710. package/dist/config/app.js.map +0 -1
  711. package/dist/config/command.d.ts.map +0 -1
  712. package/dist/config/command.js.map +0 -1
  713. package/dist/config/diagnose.d.ts.map +0 -1
  714. package/dist/config/diagnose.js.map +0 -1
  715. package/dist/config/esm-hooks.d.ts.map +0 -1
  716. package/dist/config/esm-hooks.js.map +0 -1
  717. package/dist/config/load.d.ts.map +0 -1
  718. package/dist/config/load.js.map +0 -1
  719. package/dist/config/resolve.d.ts.map +0 -1
  720. package/dist/config/resolve.js.map +0 -1
  721. package/dist/config/secrets.d.ts.map +0 -1
  722. package/dist/config/secrets.js.map +0 -1
  723. package/dist/config/targets.d.ts.map +0 -1
  724. package/dist/config/targets.js.map +0 -1
  725. package/dist/config/validate.d.ts.map +0 -1
  726. package/dist/config/validate.js.map +0 -1
  727. package/dist/engine/contract.d.ts.map +0 -1
  728. package/dist/engine/contract.js.map +0 -1
  729. package/dist/engine/index.d.ts.map +0 -1
  730. package/dist/engine/index.js.map +0 -1
  731. package/dist/engine/manifest.d.ts.map +0 -1
  732. package/dist/engine/manifest.js.map +0 -1
  733. package/dist/engine/recording.d.ts.map +0 -1
  734. package/dist/engine/recording.js.map +0 -1
  735. package/dist/engine/resolve.d.ts.map +0 -1
  736. package/dist/engine/resolve.js.map +0 -1
  737. package/dist/engine/session.d.ts.map +0 -1
  738. package/dist/engine/session.js.map +0 -1
  739. package/dist/engine/surface.d.ts.map +0 -1
  740. package/dist/engine/surface.js.map +0 -1
  741. package/dist/engine/timing.d.ts.map +0 -1
  742. package/dist/engine/timing.js.map +0 -1
  743. package/dist/expect/async.d.ts.map +0 -1
  744. package/dist/expect/async.js.map +0 -1
  745. package/dist/expect/attempt.d.ts.map +0 -1
  746. package/dist/expect/attempt.js.map +0 -1
  747. package/dist/expect/index.d.ts.map +0 -1
  748. package/dist/expect/index.js.map +0 -1
  749. package/dist/expect/poll.d.ts.map +0 -1
  750. package/dist/expect/poll.js.map +0 -1
  751. package/dist/expect/soft.d.ts.map +0 -1
  752. package/dist/expect/soft.js.map +0 -1
  753. package/dist/expect/values.d.ts.map +0 -1
  754. package/dist/expect/values.js.map +0 -1
  755. package/dist/explore/body.d.ts.map +0 -1
  756. package/dist/explore/body.js.map +0 -1
  757. package/dist/explore/executor.d.ts.map +0 -1
  758. package/dist/explore/executor.js.map +0 -1
  759. package/dist/explore/index.d.ts.map +0 -1
  760. package/dist/explore/index.js.map +0 -1
  761. package/dist/explore/plan.d.ts.map +0 -1
  762. package/dist/explore/plan.js.map +0 -1
  763. package/dist/explore/progress.d.ts.map +0 -1
  764. package/dist/explore/progress.js.map +0 -1
  765. package/dist/explore/state.d.ts.map +0 -1
  766. package/dist/explore/state.js.map +0 -1
  767. package/dist/index.d.ts.map +0 -1
  768. package/dist/index.js.map +0 -1
  769. package/dist/internal/ai-trace.d.ts.map +0 -1
  770. package/dist/internal/ai-trace.js.map +0 -1
  771. package/dist/internal/atomic-write.d.ts.map +0 -1
  772. package/dist/internal/atomic-write.js.map +0 -1
  773. package/dist/internal/brands.d.ts.map +0 -1
  774. package/dist/internal/brands.js.map +0 -1
  775. package/dist/internal/debug.d.ts.map +0 -1
  776. package/dist/internal/debug.js.map +0 -1
  777. package/dist/internal/env.d.ts.map +0 -1
  778. package/dist/internal/env.js.map +0 -1
  779. package/dist/internal/errors.d.ts.map +0 -1
  780. package/dist/internal/errors.js.map +0 -1
  781. package/dist/internal/geometry.d.ts.map +0 -1
  782. package/dist/internal/geometry.js.map +0 -1
  783. package/dist/internal/git.d.ts.map +0 -1
  784. package/dist/internal/git.js.map +0 -1
  785. package/dist/internal/globs.d.ts.map +0 -1
  786. package/dist/internal/globs.js.map +0 -1
  787. package/dist/internal/ids.d.ts.map +0 -1
  788. package/dist/internal/ids.js.map +0 -1
  789. package/dist/internal/json-value.d.ts.map +0 -1
  790. package/dist/internal/json-value.js.map +0 -1
  791. package/dist/internal/keys.d.ts.map +0 -1
  792. package/dist/internal/keys.js.map +0 -1
  793. package/dist/internal/node-version.d.ts.map +0 -1
  794. package/dist/internal/node-version.js.map +0 -1
  795. package/dist/internal/objects.d.ts.map +0 -1
  796. package/dist/internal/objects.js.map +0 -1
  797. package/dist/internal/options.d.ts.map +0 -1
  798. package/dist/internal/options.js.map +0 -1
  799. package/dist/internal/package-manager.d.ts.map +0 -1
  800. package/dist/internal/package-manager.js.map +0 -1
  801. package/dist/internal/package-version.d.ts.map +0 -1
  802. package/dist/internal/package-version.js.map +0 -1
  803. package/dist/internal/paths.d.ts.map +0 -1
  804. package/dist/internal/paths.js.map +0 -1
  805. package/dist/internal/realm-slot.d.ts.map +0 -1
  806. package/dist/internal/realm-slot.js.map +0 -1
  807. package/dist/internal/recording-modes.d.ts.map +0 -1
  808. package/dist/internal/recording-modes.js.map +0 -1
  809. package/dist/internal/redact.d.ts.map +0 -1
  810. package/dist/internal/redact.js.map +0 -1
  811. package/dist/internal/regexp.d.ts.map +0 -1
  812. package/dist/internal/regexp.js.map +0 -1
  813. package/dist/internal/roles.d.ts.map +0 -1
  814. package/dist/internal/roles.js.map +0 -1
  815. package/dist/internal/skip.d.ts.map +0 -1
  816. package/dist/internal/skip.js.map +0 -1
  817. package/dist/internal/source.d.ts.map +0 -1
  818. package/dist/internal/source.js.map +0 -1
  819. package/dist/internal/standard-schema.d.ts.map +0 -1
  820. package/dist/internal/standard-schema.js.map +0 -1
  821. package/dist/internal/suggest.d.ts.map +0 -1
  822. package/dist/internal/suggest.js.map +0 -1
  823. package/dist/internal/text.d.ts.map +0 -1
  824. package/dist/internal/text.js.map +0 -1
  825. package/dist/internal/time.d.ts.map +0 -1
  826. package/dist/internal/time.js.map +0 -1
  827. package/dist/internal/urls.d.ts.map +0 -1
  828. package/dist/internal/urls.js.map +0 -1
  829. package/dist/internal/vcs.d.ts.map +0 -1
  830. package/dist/internal/vcs.js.map +0 -1
  831. package/dist/internal/zip.d.ts.map +0 -1
  832. package/dist/internal/zip.js.map +0 -1
  833. package/dist/locator/engine.d.ts.map +0 -1
  834. package/dist/locator/engine.js.map +0 -1
  835. package/dist/locator/expression.d.ts.map +0 -1
  836. package/dist/locator/expression.js.map +0 -1
  837. package/dist/locator/screen.d.ts.map +0 -1
  838. package/dist/locator/screen.js.map +0 -1
  839. package/dist/mcp/catalog.d.ts.map +0 -1
  840. package/dist/mcp/catalog.js.map +0 -1
  841. package/dist/mcp/config.d.ts.map +0 -1
  842. package/dist/mcp/config.js.map +0 -1
  843. package/dist/mcp/recording.d.ts.map +0 -1
  844. package/dist/mcp/recording.js.map +0 -1
  845. package/dist/mcp/server.d.ts.map +0 -1
  846. package/dist/mcp/server.js.map +0 -1
  847. package/dist/mcp/session.d.ts.map +0 -1
  848. package/dist/mcp/session.js.map +0 -1
  849. package/dist/mcp/sessions.d.ts.map +0 -1
  850. package/dist/mcp/sessions.js.map +0 -1
  851. package/dist/mcp/tools.d.ts.map +0 -1
  852. package/dist/mcp/tools.js.map +0 -1
  853. package/dist/oauth/callback-server.d.ts.map +0 -1
  854. package/dist/oauth/callback-server.js.map +0 -1
  855. package/dist/oauth/chatgpt.d.ts.map +0 -1
  856. package/dist/oauth/chatgpt.js.map +0 -1
  857. package/dist/oauth/cli.d.ts.map +0 -1
  858. package/dist/oauth/cli.js.map +0 -1
  859. package/dist/oauth/copilot.d.ts.map +0 -1
  860. package/dist/oauth/copilot.js.map +0 -1
  861. package/dist/oauth/device-code.d.ts.map +0 -1
  862. package/dist/oauth/device-code.js.map +0 -1
  863. package/dist/oauth/errors.d.ts.map +0 -1
  864. package/dist/oauth/errors.js.map +0 -1
  865. package/dist/oauth/fetch.d.ts.map +0 -1
  866. package/dist/oauth/fetch.js.map +0 -1
  867. package/dist/oauth/grok.d.ts.map +0 -1
  868. package/dist/oauth/grok.js.map +0 -1
  869. package/dist/oauth/jwt.d.ts.map +0 -1
  870. package/dist/oauth/jwt.js.map +0 -1
  871. package/dist/oauth/login.d.ts.map +0 -1
  872. package/dist/oauth/login.js.map +0 -1
  873. package/dist/oauth/models.d.ts.map +0 -1
  874. package/dist/oauth/models.js.map +0 -1
  875. package/dist/oauth/pkce.d.ts.map +0 -1
  876. package/dist/oauth/pkce.js.map +0 -1
  877. package/dist/oauth/providers/github-copilot.d.ts.map +0 -1
  878. package/dist/oauth/providers/github-copilot.js.map +0 -1
  879. package/dist/oauth/providers/openai.d.ts.map +0 -1
  880. package/dist/oauth/providers/openai.js.map +0 -1
  881. package/dist/oauth/providers/xai.d.ts.map +0 -1
  882. package/dist/oauth/providers/xai.js.map +0 -1
  883. package/dist/oauth/providers.d.ts.map +0 -1
  884. package/dist/oauth/providers.js.map +0 -1
  885. package/dist/oauth/sse.d.ts.map +0 -1
  886. package/dist/oauth/sse.js.map +0 -1
  887. package/dist/oauth/store.d.ts.map +0 -1
  888. package/dist/oauth/store.js.map +0 -1
  889. package/dist/oauth/token-endpoint.d.ts.map +0 -1
  890. package/dist/oauth/token-endpoint.js.map +0 -1
  891. package/dist/oauth/types.d.ts.map +0 -1
  892. package/dist/oauth/types.js.map +0 -1
  893. package/dist/params.d.ts.map +0 -1
  894. package/dist/params.js.map +0 -1
  895. package/dist/report/build.d.ts.map +0 -1
  896. package/dist/report/build.js.map +0 -1
  897. package/dist/report/builtin.d.ts.map +0 -1
  898. package/dist/report/builtin.js.map +0 -1
  899. package/dist/report/code-frame.d.ts.map +0 -1
  900. package/dist/report/code-frame.js.map +0 -1
  901. package/dist/report/debug-steps.d.ts.map +0 -1
  902. package/dist/report/debug-steps.js.map +0 -1
  903. package/dist/report/explore-text.d.ts.map +0 -1
  904. package/dist/report/explore-text.js.map +0 -1
  905. package/dist/report/failure-text.d.ts.map +0 -1
  906. package/dist/report/failure-text.js.map +0 -1
  907. package/dist/report/format.d.ts.map +0 -1
  908. package/dist/report/format.js.map +0 -1
  909. package/dist/report/json.d.ts.map +0 -1
  910. package/dist/report/json.js.map +0 -1
  911. package/dist/report/junit.d.ts.map +0 -1
  912. package/dist/report/junit.js.map +0 -1
  913. package/dist/report/list-explore.d.ts.map +0 -1
  914. package/dist/report/list-explore.js.map +0 -1
  915. package/dist/report/list-model.d.ts.map +0 -1
  916. package/dist/report/list-model.js.map +0 -1
  917. package/dist/report/list-steps.d.ts.map +0 -1
  918. package/dist/report/list-steps.js.map +0 -1
  919. package/dist/report/list.d.ts.map +0 -1
  920. package/dist/report/list.js.map +0 -1
  921. package/dist/report/live-window.d.ts.map +0 -1
  922. package/dist/report/live-window.js.map +0 -1
  923. package/dist/report/markdown-text.d.ts.map +0 -1
  924. package/dist/report/markdown-text.js.map +0 -1
  925. package/dist/report/markdown.d.ts.map +0 -1
  926. package/dist/report/markdown.js.map +0 -1
  927. package/dist/report/outcome.d.ts.map +0 -1
  928. package/dist/report/outcome.js.map +0 -1
  929. package/dist/report/repeats.d.ts.map +0 -1
  930. package/dist/report/repeats.js.map +0 -1
  931. package/dist/report/running-tree.d.ts.map +0 -1
  932. package/dist/report/running-tree.js.map +0 -1
  933. package/dist/report/write.d.ts.map +0 -1
  934. package/dist/report/write.js.map +0 -1
  935. package/dist/run/app-ports.d.ts.map +0 -1
  936. package/dist/run/app-ports.js.map +0 -1
  937. package/dist/run/artifacts.d.ts.map +0 -1
  938. package/dist/run/artifacts.js.map +0 -1
  939. package/dist/run/budget.d.ts.map +0 -1
  940. package/dist/run/budget.js.map +0 -1
  941. package/dist/run/declared-processes.d.ts.map +0 -1
  942. package/dist/run/declared-processes.js.map +0 -1
  943. package/dist/run/events.d.ts.map +0 -1
  944. package/dist/run/events.js.map +0 -1
  945. package/dist/run/execute.d.ts.map +0 -1
  946. package/dist/run/execute.js.map +0 -1
  947. package/dist/run/extended-fixtures.d.ts.map +0 -1
  948. package/dist/run/extended-fixtures.js.map +0 -1
  949. package/dist/run/failure-evidence.d.ts.map +0 -1
  950. package/dist/run/failure-evidence.js.map +0 -1
  951. package/dist/run/fixture-recording.d.ts.map +0 -1
  952. package/dist/run/fixture-recording.js.map +0 -1
  953. package/dist/run/fixtures.d.ts.map +0 -1
  954. package/dist/run/fixtures.js.map +0 -1
  955. package/dist/run/in-process.d.ts.map +0 -1
  956. package/dist/run/in-process.js.map +0 -1
  957. package/dist/run/last-run.d.ts.map +0 -1
  958. package/dist/run/last-run.js.map +0 -1
  959. package/dist/run/managed-process.d.ts.map +0 -1
  960. package/dist/run/managed-process.js.map +0 -1
  961. package/dist/run/output.d.ts.map +0 -1
  962. package/dist/run/output.js.map +0 -1
  963. package/dist/run/process-pool.d.ts.map +0 -1
  964. package/dist/run/process-pool.js.map +0 -1
  965. package/dist/run/provision.d.ts.map +0 -1
  966. package/dist/run/provision.js.map +0 -1
  967. package/dist/run/realm.d.ts.map +0 -1
  968. package/dist/run/realm.js.map +0 -1
  969. package/dist/run/records.d.ts.map +0 -1
  970. package/dist/run/records.js.map +0 -1
  971. package/dist/run/retry.d.ts.map +0 -1
  972. package/dist/run/retry.js.map +0 -1
  973. package/dist/run/runner.d.ts.map +0 -1
  974. package/dist/run/runner.js.map +0 -1
  975. package/dist/run/scheduler.d.ts.map +0 -1
  976. package/dist/run/scheduler.js.map +0 -1
  977. package/dist/run/secrecy.d.ts.map +0 -1
  978. package/dist/run/secrecy.js.map +0 -1
  979. package/dist/run/serial.d.ts.map +0 -1
  980. package/dist/run/serial.js.map +0 -1
  981. package/dist/run/sessions.d.ts.map +0 -1
  982. package/dist/run/sessions.js.map +0 -1
  983. package/dist/run/standalone.d.ts.map +0 -1
  984. package/dist/run/standalone.js.map +0 -1
  985. package/dist/run/steps.d.ts.map +0 -1
  986. package/dist/run/steps.js.map +0 -1
  987. package/dist/run/trace-redaction.d.ts.map +0 -1
  988. package/dist/run/trace-redaction.js.map +0 -1
  989. package/dist/run/unit-runner.d.ts.map +0 -1
  990. package/dist/run/unit-runner.js.map +0 -1
  991. package/dist/run/units.d.ts.map +0 -1
  992. package/dist/run/units.js.map +0 -1
  993. package/dist/run/worker/entry.d.ts.map +0 -1
  994. package/dist/run/worker/entry.js.map +0 -1
  995. package/dist/run/worker/handle.d.ts.map +0 -1
  996. package/dist/run/worker/handle.js.map +0 -1
  997. package/dist/run/worker/protocol.d.ts.map +0 -1
  998. package/dist/run/worker/protocol.js.map +0 -1
  999. package/dist/run/worker/session.d.ts.map +0 -1
  1000. package/dist/run/worker/session.js.map +0 -1
  1001. package/dist/run/worker-models.d.ts.map +0 -1
  1002. package/dist/run/worker-models.js.map +0 -1
  1003. package/dist/secrets.d.ts.map +0 -1
  1004. package/dist/secrets.js.map +0 -1
  1005. package/dist/telemetry/checkout.d.ts.map +0 -1
  1006. package/dist/telemetry/checkout.js.map +0 -1
  1007. package/dist/telemetry/environment.d.ts.map +0 -1
  1008. package/dist/telemetry/environment.js.map +0 -1
  1009. package/dist/telemetry/events.d.ts.map +0 -1
  1010. package/dist/telemetry/events.js.map +0 -1
  1011. package/dist/telemetry/failure-kind.d.ts.map +0 -1
  1012. package/dist/telemetry/failure-kind.js.map +0 -1
  1013. package/dist/telemetry/posthog.d.ts.map +0 -1
  1014. package/dist/telemetry/posthog.js.map +0 -1
  1015. package/dist/telemetry/project.d.ts.map +0 -1
  1016. package/dist/telemetry/project.js.map +0 -1
  1017. package/dist/telemetry/store.d.ts.map +0 -1
  1018. package/dist/telemetry/store.js.map +0 -1
  1019. package/dist/telemetry/telemetry.d.ts.map +0 -1
  1020. package/dist/telemetry/telemetry.js.map +0 -1
  1021. package/dist/telemetry/token.d.ts.map +0 -1
  1022. package/dist/telemetry/token.js.map +0 -1
  1023. package/dist/types.d.ts.map +0 -1
  1024. package/dist/types.js.map +0 -1
@@ -103,4 +103,3 @@ export type ProcessHooks = () => ManagedProcessHooks;
103
103
  * aborted; what was acquired is returned for release either way.
104
104
  */
105
105
  export declare function startDeclaredProcesses(targets: readonly ResolvedTarget[], projectRoot: string, hooks: ProcessHooks, signal: AbortSignal, debug: DebugTrace, pool?: ProcessPool): Promise<AppProcesses>;
106
- //# sourceMappingURL=provision.d.ts.map
@@ -217,4 +217,3 @@ export async function startDeclaredProcesses(targets, projectRoot, hooks, signal
217
217
  throw cause;
218
218
  }
219
219
  }
220
- //# sourceMappingURL=provision.js.map
@@ -33,7 +33,10 @@ export declare function findRegistered(realm: Realm, test: CollectedTest): Regis
33
33
  /**
34
34
  * Runs one hook, or a fixture teardown, within its budget. One that overruns
35
35
  * fails with the runner's timeout error naming `label`; `onTimeout` lets the
36
- * caller cancel what it started.
36
+ * caller cancel what it started. The hook owns the `expect.poll` calls it
37
+ * starts: one still running when it returns fails it with
38
+ * `STEP_NOT_AWAITED` and is cancelled, and one left by a hook that failed is
39
+ * cancelled beside that failure.
37
40
  */
38
41
  export declare function runHook(label: string, run: () => void | Promise<void>, timeoutMs: number, onTimeout?: () => void): Promise<void>;
39
42
  export interface RealmManagerOptions {
@@ -43,6 +46,8 @@ export interface RealmManagerOptions {
43
46
  readonly cleanupTimeout: number;
44
47
  /** Run-level error sink for hook failures. */
45
48
  readonly runErrors: RunError[];
49
+ /** What collection rewrites titles with (`collectModule`), so a realm's tests match the collected ids. */
50
+ readonly redactTitle: (title: string) => string;
46
51
  readonly debug?: DebugTrace;
47
52
  }
48
53
  /** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
@@ -94,4 +99,3 @@ export declare class RealmManager {
94
99
  private suiteFixtures;
95
100
  }
96
101
  export {};
97
- //# sourceMappingURL=realm.d.ts.map
package/dist/run/realm.js CHANGED
@@ -1,5 +1,6 @@
1
1
  /** Suite realm lifecycle: module re-import, beforeAll/afterAll scope tracking. */
2
2
  import { importModule } from '../config/load.js';
3
+ import { PollScope, runInPollScope } from '../expect/poll-scope.js';
3
4
  import { classifyError, E2EError, serializeError, TestTimeoutError, } from '../internal/errors.js';
4
5
  import { DebugTrace } from '../internal/debug.js';
5
6
  import { titlePathKey } from '../internal/ids.js';
@@ -12,13 +13,26 @@ export function findRegistered(realm, test) {
12
13
  /**
13
14
  * Runs one hook, or a fixture teardown, within its budget. One that overruns
14
15
  * fails with the runner's timeout error naming `label`; `onTimeout` lets the
15
- * caller cancel what it started.
16
+ * caller cancel what it started. The hook owns the `expect.poll` calls it
17
+ * starts: one still running when it returns fails it with
18
+ * `STEP_NOT_AWAITED` and is cancelled, and one left by a hook that failed is
19
+ * cancelled beside that failure.
16
20
  */
17
- export function runHook(label, run, timeoutMs, onTimeout) {
18
- return withTimeout(Promise.resolve().then(run), timeoutMs, () => {
19
- onTimeout?.();
20
- return new TestTimeoutError(`${label} timed out`);
21
- });
21
+ export async function runHook(label, run, timeoutMs, onTimeout) {
22
+ const polls = new PollScope(`the ${label}`);
23
+ try {
24
+ await withTimeout(runInPollScope(polls, () => Promise.resolve().then(run)), timeoutMs, () => {
25
+ onTimeout?.();
26
+ return new TestTimeoutError(`${label} timed out`);
27
+ });
28
+ }
29
+ catch (cause) {
30
+ polls.close();
31
+ throw cause;
32
+ }
33
+ const notAwaited = polls.close();
34
+ if (notAwaited !== undefined)
35
+ throw notAwaited;
22
36
  }
23
37
  /** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
24
38
  export class RealmManager {
@@ -32,7 +46,7 @@ export class RealmManager {
32
46
  /** Re-imports one test module in a fresh realm. */
33
47
  async create(file) {
34
48
  this.realmCounter += 1;
35
- const registration = await this.debug.time('realm.import', () => collectModule(() => importModule(file.absolutePath, `${this.options.targetName}-${this.realmCounter}`), file.absolutePath));
49
+ const registration = await this.debug.time('realm.import', () => collectModule(() => importModule(file.absolutePath, `${this.options.targetName}-${this.realmCounter}`), file.absolutePath, this.options.redactTitle));
36
50
  return this.adopt(registration, file);
37
51
  }
38
52
  /**
@@ -152,4 +166,3 @@ function scopeId(scope) {
152
166
  function scopeChainFor(test) {
153
167
  return [undefined, ...groupChain(test.group)];
154
168
  }
155
- //# sourceMappingURL=realm.js.map
@@ -148,9 +148,24 @@ export interface ResultRecord {
148
148
  * every other field is plain data.
149
149
  */
150
150
  export type WireResultRecord = Omit<ResultRecord, 'target'>;
151
+ /** The failure a runtime skip followed, with the evidence its attempt captured. */
152
+ export interface FailureBeforeSkip {
153
+ readonly error: SerializedError;
154
+ readonly failure: FailureEvidence | undefined;
155
+ /** The failing attempt's artifacts; for a serial member, the group attempt's. */
156
+ readonly artifacts: readonly ArtifactRecord[];
157
+ }
158
+ /**
159
+ * The failure a test's `test.skip(...)` followed: the last attempt that
160
+ * failed before a skipped retry, or a soft failure the skipping attempt kept.
161
+ * Engine cleanup diagnostics after the skip are not one. A serial member's
162
+ * attempts live on its group, which `groupOf` looks up only for such a member.
163
+ */
164
+ export declare function failureBeforeSkip(result: Pick<ResultRecord, 'status' | 'skip' | 'attempts' | 'serialGroupId' | 'test'>, groupOf: (id: string) => SerialGroupRecord | undefined): FailureBeforeSkip | undefined;
165
+ /** Whether any skipped result followed a failure: what `failOnSkippedFailure` fails a run for. */
166
+ export declare function someSkippedAfterFailure(results: readonly ResultRecord[], serialGroups: readonly SerialGroupRecord[]): boolean;
151
167
  /** Strips the live target from a result for transport. */
152
168
  export declare function encodeResult(record: ResultRecord): WireResultRecord;
153
169
  export interface RunError {
154
170
  error: SerializedError;
155
171
  }
156
- //# sourceMappingURL=records.d.ts.map
@@ -7,9 +7,34 @@
7
7
  export function isFailedStatus(status) {
8
8
  return status !== 'passed' && status !== 'skipped' && status !== 'flaky';
9
9
  }
10
+ /**
11
+ * The failure a test's `test.skip(...)` followed: the last attempt that
12
+ * failed before a skipped retry, or a soft failure the skipping attempt kept.
13
+ * Engine cleanup diagnostics after the skip are not one. A serial member's
14
+ * attempts live on its group, which `groupOf` looks up only for such a member.
15
+ */
16
+ export function failureBeforeSkip(result, groupOf) {
17
+ if (result.status !== 'skipped' || result.skip?.cause !== 'explicit')
18
+ return undefined;
19
+ const runs = result.serialGroupId === undefined
20
+ ? result.attempts
21
+ : (groupOf(result.serialGroupId)?.attempts ?? []).flatMap((attempt) => attempt.members
22
+ .filter((member) => member.testId === result.test.id)
23
+ .map((member) => ({ ...member, artifacts: attempt.artifacts })));
24
+ for (const run of runs.toReversed()) {
25
+ const error = run.error ?? run.secondaryErrors.find((secondary) => secondary.phase !== 'cleanup');
26
+ if (error !== undefined)
27
+ return { error, failure: run.failure, artifacts: run.artifacts };
28
+ }
29
+ return undefined;
30
+ }
31
+ /** Whether any skipped result followed a failure: what `failOnSkippedFailure` fails a run for. */
32
+ export function someSkippedAfterFailure(results, serialGroups) {
33
+ const groups = new Map(serialGroups.map((group) => [group.id, group]));
34
+ return results.some((result) => failureBeforeSkip(result, (id) => groups.get(id)) !== undefined);
35
+ }
10
36
  /** Strips the live target from a result for transport. */
11
37
  export function encodeResult(record) {
12
38
  const { target: _target, ...rest } = record;
13
39
  return rest;
14
40
  }
15
- //# sourceMappingURL=records.js.map
@@ -12,7 +12,8 @@ export declare function isRetryEligible(attempt: RetryAttempt): boolean;
12
12
  * Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
13
13
  * failure that does not consume retry budget. `runOnce` returns the
14
14
  * finished attempt, or undefined when the attempt could not start (the
15
- * loop stops and the last observed status stands).
15
+ * loop stops and the last observed status stands). An interrupt during a
16
+ * retry keeps the verdict the failed attempt before it reached: the test
17
+ * did fail, and only its second chance was cut short.
16
18
  */
17
19
  export declare function runWithRetries(maxAttempts: number, interruptSignal: AbortSignal, runOnce: (attemptIndex: number) => Promise<RetryAttempt | undefined>): Promise<ResultStatus>;
18
- //# sourceMappingURL=retry.d.ts.map
package/dist/run/retry.js CHANGED
@@ -8,7 +8,9 @@ export function isRetryEligible(attempt) {
8
8
  * Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
9
9
  * failure that does not consume retry budget. `runOnce` returns the
10
10
  * finished attempt, or undefined when the attempt could not start (the
11
- * loop stops and the last observed status stands).
11
+ * loop stops and the last observed status stands). An interrupt during a
12
+ * retry keeps the verdict the failed attempt before it reached: the test
13
+ * did fail, and only its second chance was cut short.
12
14
  */
13
15
  export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
14
16
  let finalStatus = 'failed';
@@ -23,7 +25,7 @@ export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
23
25
  if (attempt.status === 'passed')
24
26
  return attemptCount > 1 ? 'flaky' : 'passed';
25
27
  if (attempt.status === 'interrupted')
26
- return 'interrupted';
28
+ return attemptCount > 1 ? finalStatus : 'interrupted';
27
29
  // A body that skipped itself has decided; a retry would only ask again.
28
30
  if (attempt.status === 'skipped')
29
31
  return 'skipped';
@@ -33,4 +35,3 @@ export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
33
35
  }
34
36
  return finalStatus;
35
37
  }
36
- //# sourceMappingURL=retry.js.map
@@ -5,7 +5,7 @@ import { type Shard, type TagMode } from '../collect/select.ts';
5
5
  import type { ExploreProgress } from '../explore/progress.ts';
6
6
  import { type Report1Document, type ReportExplore } from '../report/build.ts';
7
7
  import { type RunEventSink, type RunExitCode, type RunStatus } from './events.ts';
8
- import type { ResultRecord } from './records.ts';
8
+ import { type ResultRecord } from './records.ts';
9
9
  import type { BuiltinReporter, E2EConfig, RecordingMode } from '../types.ts';
10
10
  export interface RunOptions {
11
11
  cwd?: string | undefined;
@@ -169,7 +169,8 @@ export interface RunOutcome {
169
169
  /** Where the AI trace was written; undefined unless `aiTrace` was requested. */
170
170
  aiTracePath: string | undefined;
171
171
  results: readonly ResultRecord[];
172
+ /** The config the run resolved; undefined when it failed to load. */
173
+ config: ResolvedConfig | undefined;
172
174
  }
173
175
  /** Executes one complete run and returns the outcome without exiting. */
174
176
  export declare function run(options?: RunOptions): Promise<RunOutcome>;
175
- //# sourceMappingURL=runner.d.ts.map
@@ -18,11 +18,13 @@ import { writeJsonReport } from '../report/write.js';
18
18
  import { createRunEventEmitter, toEventResult } from './events.js';
19
19
  import { allocateAppPorts } from './app-ports.js';
20
20
  import { inProcessSpawner } from './in-process.js';
21
+ import { someSkippedAfterFailure } from './records.js';
21
22
  import { runUnits } from './scheduler.js';
22
23
  import { buildWorkPlans, plannedSlots } from './units.js';
23
24
  import { SessionStore } from './sessions.js';
24
25
  import { outputLayout } from './output.js';
25
- import { lastFailedIds, readLastRun } from './last-run.js';
26
+ import { claimRerunDir, pruneArtifacts } from './artifacts.js';
27
+ import { carryForward, lastFailedIds, readLastRun, reportArtifactPaths } from './last-run.js';
26
28
  import { childProcessSpawner } from './worker/handle.js';
27
29
  import { setSecretRegistry } from '../secrets.js';
28
30
  import { withAbort } from '../internal/time.js';
@@ -187,25 +189,38 @@ export async function run(options = {}) {
187
189
  */
188
190
  const currentExitCode = () => combineExitCodes([
189
191
  ...resultExitCodes(results),
192
+ ...(loaded.config?.failOnSkippedFailure === true && someSkippedAfterFailure(results, serialGroups) ? [1] : []),
190
193
  ...runErrors.map((runError) => exitCodeForCategory(runError.error.category)),
191
194
  ...(interruptController.signal.aborted ? [130] : []),
192
195
  ].filter((code) => code !== 130 || !(runAborted || stoppedEarly)));
193
196
  // Detected once the config names the project root; a report written before
194
197
  // that (a config failure) has no checkout to describe.
195
198
  let vcs;
196
- const buildRunReport = (exitCode) => buildReport({
197
- runId,
198
- config: loaded.config,
199
- vcs,
200
- startedAt,
201
- status: statusOf(exitCode),
202
- exitCode,
203
- results,
204
- serialGroups,
205
- runErrors,
206
- targetProvenance,
207
- explore: options.tests?.explore?.snapshot(),
208
- });
199
+ // The report `--last-failed` selected from, once collection has read it;
200
+ // reporters get it beside this run's report to fold the rerun into it, and
201
+ // this run's report carries what it owed that this run left out.
202
+ let lastRun;
203
+ // The ids of every test collection found, a setup no selected test needed
204
+ // among them, and the files it could not collect: what a rerun can still
205
+ // carry when the report lists no row.
206
+ let rerunCollection = { testIds: new Set(), uncollectedFiles: new Set() };
207
+ const buildRunReport = (exitCode) => {
208
+ const document = buildReport({
209
+ runId,
210
+ config: loaded.config,
211
+ vcs,
212
+ startedAt,
213
+ status: statusOf(exitCode),
214
+ exitCode,
215
+ results,
216
+ serialGroups,
217
+ runErrors,
218
+ targetProvenance,
219
+ explore: options.tests?.explore?.snapshot(),
220
+ });
221
+ const carried = lastRun === undefined ? undefined : carryForward(lastRun, document, rerunCollection);
222
+ return carried === undefined ? document : { ...document, run: { ...document.run, carried } };
223
+ };
209
224
  /**
210
225
  * Writes the canonical report and returns its path only once the file
211
226
  * exists: a host must never be handed a path to a report that was not
@@ -249,9 +264,6 @@ export async function run(options = {}) {
249
264
  return undefined;
250
265
  }
251
266
  };
252
- // The report `--last-failed` selected from, once collection has read it;
253
- // reporters get it beside this run's report to fold the rerun into it.
254
- let lastRun;
255
267
  /**
256
268
  * Whether the run got as far as its tests. Only such a run writes into the
257
269
  * output directory: one that stopped before leaves the previous run's
@@ -300,7 +312,7 @@ export async function run(options = {}) {
300
312
  ...(lastRun === undefined ? {} : { lastRun }),
301
313
  }, options.reporterTimeout ?? REPORTER_TIMEOUT_MS, forceController.signal);
302
314
  listReporter?.rows(rows);
303
- return { exitCode, status, report, reportPath, aiTracePath, results };
315
+ return { exitCode, status, report, reportPath, aiTracePath, results, config: loaded.config };
304
316
  };
305
317
  if (loaded.config === undefined) {
306
318
  recordFailure(loaded.error, 'config');
@@ -364,6 +376,10 @@ export async function run(options = {}) {
364
376
  : collectInMemory(config.projectRoot, options.tests.file, options.tests.registration, consumesSession(options.tests.registration) ? await collectSetups(config) : undefined);
365
377
  const inputs = await selectionInputs(options, config);
366
378
  lastRun = inputs.lastRun;
379
+ rerunCollection = {
380
+ testIds: new Set(collection.tests.map((test) => test.id)),
381
+ uncollectedFiles: new Set(collection.uncollected.map((skipped) => skipped.file)),
382
+ };
367
383
  const selection = repeatEach(select(collection, config, inputs.filters, options.passWithNoTests !== undefined ? { passWithNoTests: options.passWithNoTests } : {}), options.repeatEach ?? 1);
368
384
  return { collection, selection };
369
385
  }));
@@ -450,15 +466,26 @@ export async function run(options = {}) {
450
466
  // Tests are about to start, and only now is the previous run's evidence
451
467
  // given up: the artifact tree is emptied, so what is there once this run
452
468
  // ends is its own and nothing a report no longer names, and this run's
453
- // report replaces the last. A run that stopped before here (no test
454
- // selected, a collection error, a target that cannot record what it asks,
455
- // an app that failed to start, an interrupt) leaves both, and
469
+ // report replaces the last. A `--last-failed` rerun keeps the evidence
470
+ // the report it reruns names instead, since that report's results fold
471
+ // into the rerun's and its carried tests do not run again, and files its
472
+ // own attempts in a fresh `rerun-<n>` directory beside it, so no attempt
473
+ // overwrites an earlier one's files. A run that stopped before here (no
474
+ // test selected, a collection error, a target that cannot record what it
475
+ // asks, an app that failed to start, an interrupt) leaves both, and
456
476
  // `--last-failed` still reads the run that executed. A wipe that fails
457
477
  // part way has already given up the old evidence, so this run's report
458
478
  // records the failure.
459
479
  testsStarted = true;
480
+ let rerunDir;
460
481
  try {
461
- await rm(layout.artifacts, { recursive: true, force: true });
482
+ if (lastRun === undefined) {
483
+ await rm(layout.artifacts, { recursive: true, force: true });
484
+ }
485
+ else {
486
+ await pruneArtifacts(layout.artifacts, reportArtifactPaths(lastRun));
487
+ rerunDir = await claimRerunDir(layout.artifacts);
488
+ }
462
489
  }
463
490
  catch (cause) {
464
491
  recordFailure(cause, 'launch');
@@ -482,6 +509,7 @@ export async function run(options = {}) {
482
509
  inMemory: options.tests,
483
510
  runId,
484
511
  artifactsRoot,
512
+ rerunDir,
485
513
  sessionStore: store,
486
514
  headed: options.headed ?? false,
487
515
  debug,
@@ -495,6 +523,7 @@ export async function run(options = {}) {
495
523
  ports: config.ports,
496
524
  runId,
497
525
  artifactsRoot,
526
+ rerunDir,
498
527
  headed: options.headed ?? false,
499
528
  sessionsRoot: layout.sessions,
500
529
  sessionKeyBase64: store.exportKeyForWorker(),
@@ -747,13 +776,21 @@ function resultExitCodes(results) {
747
776
  /** Why a reporter's `onRunFinished` was given up on: the message is the stderr line. */
748
777
  class ReporterAbandoned extends Error {
749
778
  }
779
+ /**
780
+ * The built-in reporters that write files beside `report.json`. A forced
781
+ * interrupt never abandons them: they are local writes, and giving one up
782
+ * would leave the previous run's `summary.md` or `junit.xml` beside this
783
+ * run's report, where CI reads it as this run's.
784
+ */
785
+ const FILE_REPORTERS = new Set([STATELESS_REPORTERS.junit, STATELESS_REPORTERS.markdown]);
750
786
  /**
751
787
  * Awaits every reporter's `onRunFinished` at once, each within `timeoutMs`
752
- * and until a forced interrupt, and collects the summary rows they resolve
753
- * with. Each reporter gets a signal that aborts on either, so a well-behaved
754
- * one cancels its own work and leaves no handle holding the process. A
755
- * reporter that throws, runs out of time, or returns something other than
756
- * rows is one line on stderr; it can never change the run's outcome.
788
+ * and, except the built-in file reporters, until a forced interrupt, and
789
+ * collects the summary rows they resolve with. Each reporter gets a signal
790
+ * that aborts on either, so a well-behaved one cancels its own work and
791
+ * leaves no handle holding the process. A reporter that throws, runs out of
792
+ * time, or returns something other than rows is one line on stderr; it can
793
+ * never change the run's outcome.
757
794
  */
758
795
  async function runReporters(reporters, finished, timeoutMs, force) {
759
796
  const warn = (reporter, detail) => {
@@ -767,10 +804,12 @@ async function runReporters(reporters, finished, timeoutMs, force) {
767
804
  const abandon = new AbortController();
768
805
  const timer = setTimeout(() => abandon.abort(new ReporterAbandoned(`did not finish within ${budget}`)), timeoutMs);
769
806
  const onForce = () => abandon.abort(new ReporterAbandoned('abandoned: the run was forced to stop'));
770
- if (force.aborted)
771
- onForce();
772
- else
773
- force.addEventListener('abort', onForce, { once: true });
807
+ if (!FILE_REPORTERS.has(reporter)) {
808
+ if (force.aborted)
809
+ onForce();
810
+ else
811
+ force.addEventListener('abort', onForce, { once: true });
812
+ }
774
813
  try {
775
814
  const result = await withAbort(() => Promise.resolve(onRunFinished.call(reporter, finished, abandon.signal)), abandon.signal, () => abandon.signal.reason);
776
815
  if (result === undefined)
@@ -803,4 +842,3 @@ function isSummaryRow(value) {
803
842
  const { label, text } = value;
804
843
  return typeof label === 'string' && label.length > 0 && typeof text === 'string' && text.length > 0;
805
844
  }
806
- //# sourceMappingURL=runner.js.map
@@ -66,4 +66,3 @@ export interface RunUnitsOptions {
66
66
  }
67
67
  /** Runs every planned unit and streams records. */
68
68
  export declare function runUnits(options: RunUnitsOptions): Promise<void>;
69
- //# sourceMappingURL=scheduler.d.ts.map
@@ -682,4 +682,3 @@ class Scheduler {
682
682
  await Promise.all(remaining.map((worker) => worker.runner.exit));
683
683
  }
684
684
  }
685
- //# sourceMappingURL=scheduler.js.map
@@ -47,6 +47,15 @@ export declare class SecretExposure {
47
47
  * learns them; provider-backed values join as they resolve.
48
48
  */
49
49
  export declare const processSecrets: SecretLedger;
50
+ /**
51
+ * A ledger of the static values of `secrets` alone, built once per map. What
52
+ * text produced before any session exists is redacted with, such as a test
53
+ * title at collection: every process resolving the same config redacts it
54
+ * alike, so a test's id agrees between the runner and its workers. A
55
+ * provider-backed value is not known yet and is not in it. Shared, so it is
56
+ * handed out read-only: nothing registers into it.
57
+ */
58
+ export declare function staticSecretLedger(secrets: ResolvedConfig['allSecrets']): Pick<SecretLedger, 'redact' | 'entries'>;
50
59
  /** Seeds `processSecrets` with the static values of `secrets`, so output before any session opens is covered too. */
51
60
  export declare function registerStaticSecrets(secrets: ResolvedConfig['allSecrets']): void;
52
61
  /**
@@ -70,6 +79,12 @@ export declare function registerDerivedSecrets(name: string, derived: readonly s
70
79
  * values join through the resolver at fill time.
71
80
  */
72
81
  export declare function sessionSecrecy(session: TargetSession, secrets: ResolvedConfig['allSecrets']): SessionSecrecy;
82
+ /**
83
+ * Redacts `text` with every value `session` has seen, or with the static
84
+ * values while no session is open yet, so text an attempt produces before
85
+ * its session exists (a step label, a fixture error) is covered too.
86
+ */
87
+ export declare function redactForSession(session: TargetSession | undefined, secrets: ResolvedConfig['allSecrets'], text: string): string;
73
88
  /** What a saved session carries of the secrecy of the attempt that saved it. */
74
89
  export interface SavedSecrecy {
75
90
  /** Name and value pairs the saving session learned beyond the static config values; travels only inside the encrypted payload. */
@@ -86,4 +101,3 @@ export interface SavedSecrecy {
86
101
  export declare function carriedSecrecy(secrecy: SessionSecrecy, secrets: ResolvedConfig['allSecrets']): SavedSecrecy;
87
102
  /** Seeds a restored session's secrecy with what the saving session knew, so a value the restored state echoes back is still redacted and withheld. */
88
103
  export declare function adoptSecrecy(secrecy: SessionSecrecy, saved: SavedSecrecy): void;
89
- //# sourceMappingURL=secrecy.d.ts.map
@@ -43,6 +43,24 @@ export class SecretExposure {
43
43
  * learns them; provider-backed values join as they resolve.
44
44
  */
45
45
  export const processSecrets = new SecretLedger();
46
+ /** The static ledger of each secrets map, built once. */
47
+ const staticLedgers = new WeakMap();
48
+ /**
49
+ * A ledger of the static values of `secrets` alone, built once per map. What
50
+ * text produced before any session exists is redacted with, such as a test
51
+ * title at collection: every process resolving the same config redacts it
52
+ * alike, so a test's id agrees between the runner and its workers. A
53
+ * provider-backed value is not known yet and is not in it. Shared, so it is
54
+ * handed out read-only: nothing registers into it.
55
+ */
56
+ export function staticSecretLedger(secrets) {
57
+ let ledger = staticLedgers.get(secrets);
58
+ if (ledger === undefined) {
59
+ ledger = new SecretLedger([...secrets].flatMap(([name, { value }]) => (typeof value === 'string' ? [[name, value]] : [])));
60
+ staticLedgers.set(secrets, ledger);
61
+ }
62
+ return ledger;
63
+ }
46
64
  /** Seeds `processSecrets` with the static values of `secrets`, so output before any session opens is covered too. */
47
65
  export function registerStaticSecrets(secrets) {
48
66
  for (const [name, { value }] of secrets) {
@@ -97,13 +115,21 @@ export function sessionSecrecy(session, secrets) {
97
115
  if (secrecy === undefined) {
98
116
  registerStaticSecrets(secrets);
99
117
  secrecy = {
100
- ledger: new SecretLedger([...secrets].flatMap(([name, { value }]) => typeof value === 'string' ? [[name, value]] : [])),
118
+ ledger: new SecretLedger(staticSecretLedger(secrets).entries()),
101
119
  exposure: new SecretExposure(),
102
120
  };
103
121
  secrecyBySession.set(session, secrecy);
104
122
  }
105
123
  return secrecy;
106
124
  }
125
+ /**
126
+ * Redacts `text` with every value `session` has seen, or with the static
127
+ * values while no session is open yet, so text an attempt produces before
128
+ * its session exists (a step label, a fixture error) is covered too.
129
+ */
130
+ export function redactForSession(session, secrets, text) {
131
+ return (session === undefined ? staticSecretLedger(secrets) : sessionSecrecy(session, secrets).ledger).redact(text);
132
+ }
107
133
  /**
108
134
  * The secrecy a session envelope carries: the provider-resolved values the
109
135
  * session learned, which the consumer's session cannot learn again on its
@@ -127,4 +153,3 @@ export function adoptSecrecy(secrecy, saved) {
127
153
  if (saved.tainted)
128
154
  secrecy.exposure.raise('filled');
129
155
  }
130
- //# sourceMappingURL=secrecy.js.map
@@ -37,6 +37,8 @@ export interface SharedSerialSession {
37
37
  export interface SerialHost {
38
38
  readonly target: ResolvedTarget;
39
39
  readonly artifactsRoot: string;
40
+ /** See `TargetExecutorOptions.rerunDir`. */
41
+ readonly rerunDir: string | undefined;
40
42
  readonly runId: string;
41
43
  /** The configured artifact store, so group-owned artifacts (the shared trace) upload like any other. */
42
44
  readonly artifactStore: ArtifactStore | undefined;
@@ -57,4 +59,3 @@ export interface SerialHost {
57
59
  }
58
60
  /** Runs one serial unit to completion and emits every member result. */
59
61
  export declare function runSerialUnit(host: SerialHost, members: readonly TestTargetPair[], file: FileRef): Promise<SerialGroupRecord>;
60
- //# sourceMappingURL=serial.d.ts.map
@@ -3,7 +3,7 @@ import { classifyError, ConfigurationError, serializeError, } from '../internal/
3
3
  import { canonicalDigest, timestamp, uuidv7 } from '../internal/ids.js';
4
4
  import { groupTitles } from '../collect/registry.js';
5
5
  import { pairRecordings } from '../collect/select.js';
6
- import { createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
6
+ import { attemptSegments, createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
7
7
  import { findRegistered, RealmManager } from './realm.js';
8
8
  import { isFailedStatus } from './records.js';
9
9
  import { runWithRetries } from './retry.js';
@@ -35,8 +35,11 @@ export async function runSerialUnit(host, members, file) {
35
35
  const finalStatus = await runWithRetries(first.options.retries + 1, host.interruptSignal, async (attemptIndex) => {
36
36
  const attempt = await runSerialAttempt(host, members, file, attemptIndex);
37
37
  group.attempts.push(attempt);
38
- for (const member of attempt.members)
39
- memberFinalStatus.set(member.testId, member);
38
+ // A retry the run interrupted keeps the verdict before it, so each member keeps what that attempt said.
39
+ const cutRetry = attemptIndex > 0 && attempt.status === 'interrupted';
40
+ if (!cutRetry)
41
+ for (const member of attempt.members)
42
+ memberFinalStatus.set(member.testId, member);
40
43
  // A beforeAll failure is not retry-eligible: the
41
44
  // attempt stands as recorded and the retry loop stops here.
42
45
  if (attempt.error?.code === 'HOOK_FAILED')
@@ -88,13 +91,13 @@ async function runSerialAttempt(host, members, file, attemptIndex) {
88
91
  const memberRecords = [];
89
92
  const first = members[0];
90
93
  const recordings = pairRecordings(first, attemptIndex);
91
- const artifactSegments = [
94
+ const artifactSegments = attemptSegments(host.rerunDir, [
92
95
  host.target.name,
93
96
  sanitizePathSegment(first.test.serialId ?? first.test.id),
94
97
  first.agent,
95
98
  ...repeatSegment(first.repeat),
96
99
  `attempt-${attemptIndex}`,
97
- ];
100
+ ]);
98
101
  const artifacts = createAttemptArtifacts({
99
102
  artifactsRoot: host.artifactsRoot,
100
103
  segments: artifactSegments,
@@ -275,4 +278,3 @@ function serialTitlePath(test) {
275
278
  const titles = groupTitles(test.serialRoot);
276
279
  return titles.length === 0 ? [test.title] : titles;
277
280
  }
278
- //# sourceMappingURL=serial.js.map
@@ -74,4 +74,3 @@ export declare class SessionStore {
74
74
  /** Deletes the run's session directory. */
75
75
  cleanup(): void;
76
76
  }
77
- //# sourceMappingURL=sessions.d.ts.map
@@ -289,4 +289,3 @@ function parsePayload(text, name) {
289
289
  }
290
290
  return parsed;
291
291
  }
292
- //# sourceMappingURL=sessions.js.map
@@ -61,4 +61,3 @@ export interface StandaloneAttempt {
61
61
  * failure everything that did start is torn down before the error surfaces.
62
62
  */
63
63
  export declare function openStandaloneAttempt(options: StandaloneAttemptOptions): Promise<StandaloneAttempt>;
64
- //# sourceMappingURL=standalone.d.ts.map
@@ -18,7 +18,7 @@ import { TargetExecutor } from './execute.js';
18
18
  import { createFixtures } from './fixtures.js';
19
19
  import { PreparedEngines, recordingNotices, startDeclaredProcesses, validateEngine } from './provision.js';
20
20
  import { attemptRecording } from '../internal/recording-modes.js';
21
- import { sessionSecrecy } from './secrecy.js';
21
+ import { redactForSession, sessionSecrecy } from './secrecy.js';
22
22
  import { SessionStore } from './sessions.js';
23
23
  import { outputLayout } from './output.js';
24
24
  import { StepRecorder } from './steps.js';
@@ -84,12 +84,13 @@ export async function openStandaloneAttempt(options) {
84
84
  ...(options.onProgress === undefined ? {} : { onProgress: (_testId, progress) => options.onProgress?.(progress) }),
85
85
  },
86
86
  });
87
+ let session;
87
88
  const steps = new StepRecorder(attemptId, {
88
89
  maxEventsPerStep: config.limits.maxEventsPerStep,
89
90
  projectRoot: config.projectRoot,
91
+ redact: (text) => redactForSession(session, config.allSecrets, text),
90
92
  ...(options.onProgress === undefined ? {} : { onProgress: options.onProgress }),
91
93
  });
92
- let session;
93
94
  const artifacts = createAttemptArtifacts({
94
95
  artifactsRoot: layout.artifacts,
95
96
  segments: [target.name, 'sessions', attemptId],
@@ -190,4 +191,3 @@ function sessionRecording(recording) {
190
191
  const planned = attemptRecording(recording, 0);
191
192
  return planned?.keep === 'on-failure' ? undefined : planned;
192
193
  }
193
- //# sourceMappingURL=standalone.js.map
@@ -268,15 +268,9 @@ export interface StepRecorderOptions {
268
268
  readonly onProgress?: (progress: StepProgress) => void;
269
269
  /** The project root; with it, every step and step error names the test line it came from. */
270
270
  readonly projectRoot?: string;
271
- /** Replaces secret values in a step error's message and details before the record keeps them. */
271
+ /** Replaces secret values in a step's label, and in its error's message and details, before the record keeps them. */
272
272
  readonly redact?: (text: string) => string;
273
273
  }
274
- /**
275
- * Whether an unhandled rejection is an abandoned step's: already recorded as
276
- * `STEP_NOT_AWAITED`, reaching the process only because the promise the
277
- * test did not await rejected with it. Such a rejection is not a fault.
278
- */
279
- export declare function isAbandonedStepRejection(cause: unknown): boolean;
280
274
  export declare class StepRecorder {
281
275
  private readonly attemptId;
282
276
  private readonly attempt;
@@ -306,7 +300,7 @@ export declare class StepRecorder {
306
300
  /** Highest timeline index among passed verification steps, or -1 when none has. */
307
301
  get lastVerifiedStepIndex(): number;
308
302
  /** Runs one public API call as a recorded top-level step. */
309
- run<T>(kind: StepKind, api: string, label: string, body: () => Promise<T>, options?: StepRunOptions): Promise<T>;
303
+ run<T>(kind: StepKind, api: string, rawLabel: string, body: () => Promise<T>, options?: StepRunOptions): Promise<T>;
310
304
  private execute;
311
305
  /**
312
306
  * Fails every step still running once the test body has settled, and
@@ -357,4 +351,3 @@ export declare class StepRecorder {
357
351
  private publish;
358
352
  }
359
353
  export {};
360
- //# sourceMappingURL=steps.d.ts.map