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
@@ -10,21 +10,23 @@ import { timestamp, uuidv7 } from '../internal/ids.js';
10
10
  import { engineAppInfo } from '../config/app.js';
11
11
  import { Deadline, NEVER_ABORTS, withAbort, withScopedBudget, withTimeout } from '../internal/time.js';
12
12
  import { createAgentCacheContext, flushStagedTraces } from '../cache/context.js';
13
+ import { storedRecordingsFor } from '../cache/rekeyed.js';
13
14
  import { pairRecordings } from '../collect/select.js';
14
- import { createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
15
+ import { attemptSegments, createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
15
16
  import { AttemptBudget } from './budget.js';
16
17
  import { createEngineSession } from '../engine/session.js';
17
18
  import { createExtendedFixtures } from './extended-fixtures.js';
18
19
  import { captureFailureEvidence } from './failure-evidence.js';
19
20
  import { createFixtures } from './fixtures.js';
20
21
  import { publishAttempt } from '../expect/attempt.js';
22
+ import { PollScope, runInPollScope } from '../expect/poll-scope.js';
21
23
  import { SoftFailures } from '../expect/soft.js';
22
24
  import { findRegistered, RealmManager, runHook } from './realm.js';
23
25
  import { isFailedStatus } from './records.js';
24
26
  import { runWithRetries } from './retry.js';
25
27
  import { runSerialUnit } from './serial.js';
26
28
  import { interruptedSkip, pairKey, pairResult, repeatSegment, unstartedResult } from './units.js';
27
- import { adoptSecrecy, carriedSecrecy, processSecrets, registerDerivedSecrets, resolveSecretValue, sessionSecrecy } from './secrecy.js';
29
+ import { adoptSecrecy, carriedSecrecy, processSecrets, registerDerivedSecrets, redactForSession, resolveSecretValue, sessionSecrecy, staticSecretLedger } from './secrecy.js';
28
30
  import { isSecret } from '../secrets.js';
29
31
  import { SessionStaging, SessionStore, targetIdentity } from './sessions.js';
30
32
  import { redactTraceArchives } from './trace-redaction.js';
@@ -43,6 +45,7 @@ export class TargetExecutor {
43
45
  return this.config.artifactStore;
44
46
  }
45
47
  artifactsRoot;
48
+ rerunDir;
46
49
  interruptSignal;
47
50
  realms;
48
51
  debug;
@@ -53,12 +56,15 @@ export class TargetExecutor {
53
56
  lastAttemptTestId;
54
57
  models;
55
58
  sessionIdentity;
59
+ /** The file store's listing under `cache.strict`, read once for every attempt here. */
60
+ storedRecordings;
56
61
  /** Resolves once the engine's init hook completed for this worker. */
57
62
  engineReady;
58
63
  constructor(options) {
59
64
  this.options = options;
60
65
  this.target = options.target;
61
66
  this.artifactsRoot = options.artifactsRoot;
67
+ this.rerunDir = options.rerunDir;
62
68
  this.interruptSignal = options.interruptSignal;
63
69
  this.debug = options.debug ?? new DebugTrace(false);
64
70
  this.models = new WorkerModels((error) => {
@@ -70,9 +76,11 @@ export class TargetExecutor {
70
76
  timeout: options.config.timeout,
71
77
  cleanupTimeout: options.config.cleanupTimeout,
72
78
  runErrors: this.runErrors,
79
+ redactTitle: staticSecretLedger(options.config.allSecrets).redact,
73
80
  debug: this.debug,
74
81
  });
75
82
  this.sessionIdentity = targetIdentity(options.target);
83
+ this.storedRecordings = storedRecordingsFor(options.config.cache);
76
84
  }
77
85
  get config() {
78
86
  return this.options.config;
@@ -544,9 +552,10 @@ export class TargetExecutor {
544
552
  const shared = context.kind === 'serial' ? context.shared : undefined;
545
553
  const onProgress = this.options.events?.onProgress;
546
554
  let openSession = null;
547
- // Secret values the session has seen never enter an error record; the
548
- // ledger is live, so a value resolved mid-attempt is covered too.
549
- const redact = (text) => openSession === null ? text : sessionSecrecy(openSession, this.config.allSecrets).ledger.redact(text);
555
+ // Secret values the session has seen never enter an error record or a
556
+ // step label; the ledger is live, so a value resolved mid-attempt is
557
+ // covered too. Before a session opens, the static values still are.
558
+ const redact = (text) => redactForSession(openSession ?? undefined, this.config.allSecrets, text);
550
559
  const steps = new StepRecorder(attemptId, {
551
560
  attempt: { id: shared?.attemptId ?? attemptId, index: attemptIndex },
552
561
  maxEventsPerStep: this.config.limits.maxEventsPerStep,
@@ -586,7 +595,13 @@ export class TargetExecutor {
586
595
  // agent and repeat segments keep a test run as several agents, or
587
596
  // several times, from overwriting itself.
588
597
  segments: shared?.artifactSegments ??
589
- [this.target.name, sanitizePathSegment(registered.artifactName ?? pair.test.id), pair.agent, ...repeatSegment(pair.repeat), `attempt-${attemptIndex}`],
598
+ attemptSegments(this.rerunDir, [
599
+ this.target.name,
600
+ sanitizePathSegment(registered.artifactName ?? pair.test.id),
601
+ pair.agent,
602
+ ...repeatSegment(pair.repeat),
603
+ `attempt-${attemptIndex}`,
604
+ ]),
590
605
  attemptId,
591
606
  currentStepId: () => steps.currentStepId,
592
607
  ...(this.config.artifactStore === undefined ? {} : { store: this.config.artifactStore }),
@@ -612,6 +627,8 @@ export class TargetExecutor {
612
627
  let skipped;
613
628
  let phase = 'launch';
614
629
  let timedOut = false;
630
+ // The polls the fixtures, the beforeEach hooks, and the body start.
631
+ const bodyPolls = new PollScope('the test body');
615
632
  // Captured the moment the primary failure lands: steps that pass later —
616
633
  // afterEach cleanup, teardown — must not confirm traces the failure
617
634
  // implicated (a cleanup assertion says nothing about the failed flow).
@@ -662,6 +679,7 @@ export class TargetExecutor {
662
679
  testId: pair.test.id,
663
680
  target: this.sessionIdentity,
664
681
  attemptIndex,
682
+ recordings: this.storedRecordings,
665
683
  })
666
684
  : undefined;
667
685
  // A rejection nobody caught, handed in by the process while this attempt
@@ -720,22 +738,25 @@ export class TargetExecutor {
720
738
  // object, whichever `test` they were registered through.
721
739
  const extended = createExtendedFixtures(registered.fixtures, fixtures, this.target.engine?.name ?? 'none');
722
740
  /**
723
- * Steps the body left running when it settled were not awaited. Each
724
- * is recorded as failed at its call, cancelled through the attempt
725
- * signal the way a timeout cancels the body, and waited for within one
726
- * cleanup budget, so teardown starts on a quiet session. Left alone,
727
- * such a step would fail once the session closed with nobody to catch
728
- * it and take the worker down.
741
+ * Steps and polls the body left running when it settled were not
742
+ * awaited. A step is recorded as failed at its call, cancelled through
743
+ * the attempt signal the way a timeout cancels the body, and waited for
744
+ * within one cleanup budget, so teardown starts on a quiet session.
745
+ * Left alone, such a step would fail once the session closed with
746
+ * nobody to catch it and take the worker down. A poll is cancelled
747
+ * alone; left alone, its timeout would fail whatever ran then.
748
+ * Returns their errors, steps first.
729
749
  */
730
750
  const abandonNotAwaited = async () => {
731
751
  if (attemptEnd.signal.aborted)
732
- return undefined;
733
- const notAwaited = steps.abandonRunning();
734
- if (notAwaited === undefined)
735
- return undefined;
736
- attemptAbort.abort();
737
- await withTimeout(steps.settleAbandoned(), this.config.cleanupTimeout, () => new Error('abandoned steps did not settle')).catch(() => undefined);
738
- return notAwaited;
752
+ return [];
753
+ const pollsNotAwaited = bodyPolls.close();
754
+ const stepsNotAwaited = steps.abandonRunning();
755
+ if (stepsNotAwaited !== undefined) {
756
+ attemptAbort.abort();
757
+ await withTimeout(steps.settleAbandoned(), this.config.cleanupTimeout, () => new Error('abandoned steps did not settle')).catch(() => undefined);
758
+ }
759
+ return [stepsNotAwaited, pollsNotAwaited].filter((error) => error !== undefined);
739
760
  };
740
761
  const mainWork = async () => {
741
762
  try {
@@ -749,19 +770,22 @@ export class TargetExecutor {
749
770
  }
750
771
  catch (cause) {
751
772
  // The body's own failure stays the verdict; the step it abandoned
752
- // and the soft failures it kept are noted beside it.
773
+ // and the soft failures it kept are noted beside it. A skip keeps
774
+ // only the soft failures: a step or poll it left running is not one.
753
775
  const notAwaited = await abandonNotAwaited();
754
776
  const softFailure = soft.close();
755
- if (!isRuntimeSkip(cause)) {
756
- for (const secondary of [notAwaited, softFailure]) {
757
- if (secondary !== undefined) {
758
- secondaryErrors.push(serializeError(secondary, { phase: 'body', projectRoot: this.config.projectRoot, redact }));
759
- }
777
+ const kept = isRuntimeSkip(cause) ? [softFailure] : [...notAwaited, softFailure];
778
+ for (const secondary of kept) {
779
+ if (secondary !== undefined) {
780
+ secondaryErrors.push(serializeError(secondary, { phase: 'body', projectRoot: this.config.projectRoot, redact }));
760
781
  }
761
782
  }
762
783
  throw cause;
763
784
  }
764
- const notAwaited = await abandonNotAwaited();
785
+ const [notAwaited, ...moreNotAwaited] = await abandonNotAwaited();
786
+ for (const secondary of moreNotAwaited) {
787
+ secondaryErrors.push(serializeError(secondary, { phase: 'body', projectRoot: this.config.projectRoot, redact }));
788
+ }
765
789
  if (notAwaited !== undefined)
766
790
  throw notAwaited;
767
791
  // Soft failures fail the attempt once the body has settled, before
@@ -777,8 +801,8 @@ export class TargetExecutor {
777
801
  // down with the worker process; the attempt records the interrupt and
778
802
  // moves to cleanup.
779
803
  const work = this.options.isolated
780
- ? withAbort(mainWork(), this.interruptSignal, () => new E2EError('interrupted', 'INTERRUPTED', `run interrupted in phase ${phase}`))
781
- : mainWork();
804
+ ? withAbort(runInPollScope(bodyPolls, mainWork), this.interruptSignal, () => new E2EError('interrupted', 'INTERRUPTED', `run interrupted in phase ${phase}`))
805
+ : runInPollScope(bodyPolls, mainWork);
782
806
  const body = Promise.race([
783
807
  work,
784
808
  new Promise((_, reject) => {
@@ -796,6 +820,8 @@ export class TargetExecutor {
796
820
  // The race has settled: a rejection surfacing while the evidence is
797
821
  // captured is recorded, not aimed at it.
798
822
  cutBody = undefined;
823
+ // A body cut short may have been awaiting its polls; they end with it.
824
+ bodyPolls.close();
799
825
  // `skipRunningTest` has already refused the cases that may not skip.
800
826
  if (isRuntimeSkip(cause))
801
827
  skipped = cause;
@@ -857,6 +883,7 @@ export class TargetExecutor {
857
883
  recordFailure(cause, phase);
858
884
  }
859
885
  finally {
886
+ bodyPolls.close();
860
887
  this.strayFailure = undefined;
861
888
  this.lastAttemptTestId = pair.test.id;
862
889
  attemptEnd.abort();
@@ -937,4 +964,3 @@ function registerVideos(sink, segments) {
937
964
  throw new EngineError('ENGINE_FAILURE', `the engine returned a video link that is not an http(s) URL: ${rejected.join(', ')}`, { retryable: false });
938
965
  }
939
966
  }
940
- //# sourceMappingURL=execute.js.map
@@ -30,4 +30,3 @@ export interface ExtendedFixtures {
30
30
  * fixture is the one the body would otherwise read.
31
31
  */
32
32
  export declare function createExtendedFixtures(definitions: readonly FixtureDefinition[], fixtures: object, engineName: string): ExtendedFixtures;
33
- //# sourceMappingURL=extended-fixtures.d.ts.map
@@ -1,4 +1,5 @@
1
1
  /** The fixtures a test's `test.extend()` chain adds to one attempt. */
2
+ import { pollLineage } from '../expect/poll-scope.js';
2
3
  import { ConfigurationError } from '../internal/errors.js';
3
4
  /**
4
5
  * Binds a chain of fixture definitions to one attempt's fixture object. The
@@ -50,8 +51,10 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
50
51
  ready();
51
52
  return released;
52
53
  };
54
+ // The function's polls are the body's until `use` returns, then its teardown's.
55
+ const polls = pollLineage();
53
56
  const run = Promise.resolve()
54
- .then(() => definition.fn(fixtures, use))
57
+ .then(() => polls.run(() => definition.fn(fixtures, use)))
55
58
  .then(() => {
56
59
  if (!used) {
57
60
  failed(new ConfigurationError('TEST_SETUP_FAILED', `fixture "${name}" returned without calling use(); a fixture awaits use(value) to hand its value to the test`));
@@ -66,7 +69,7 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
66
69
  run.catch(() => undefined);
67
70
  await provided;
68
71
  if (!abandoned)
69
- active.push({ name, run, release, misuse: () => misuse });
72
+ active.push({ name, run, release, polls, misuse: () => misuse });
70
73
  };
71
74
  return {
72
75
  async setUp() {
@@ -78,6 +81,7 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
78
81
  return active.toReversed().map((state) => ({
79
82
  name: state.name,
80
83
  run: async () => {
84
+ state.polls.handOver();
81
85
  state.release();
82
86
  await state.run;
83
87
  const misuse = state.misuse();
@@ -88,4 +92,3 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
88
92
  },
89
93
  };
90
94
  }
91
- //# sourceMappingURL=extended-fixtures.js.map
@@ -33,4 +33,3 @@ export interface FailureEvidenceOptions {
33
33
  * captured, so the record carries no empty block.
34
34
  */
35
35
  export declare function captureFailureEvidence(options: FailureEvidenceOptions): Promise<FailureEvidence | undefined>;
36
- //# sourceMappingURL=failure-evidence.d.ts.map
@@ -109,7 +109,9 @@ function locatorCandidates(error, observation, redact, appOrigin) {
109
109
  return [];
110
110
  if (error.code !== 'LOCATOR_NOT_FOUND' && error.code !== 'LOCATOR_AMBIGUOUS')
111
111
  return [];
112
- const { role, testId, name } = error.details ?? {};
112
+ const details = error.details ?? {};
113
+ // The nodes are redacted; the query is compared in the same form, so a secret test id still finds its node.
114
+ const [role, testId, name] = [details.role, details.testId, details.name].map((value) => (value === undefined ? undefined : redact(value)));
113
115
  const words = tokens(name ?? '');
114
116
  if (role === undefined && testId === undefined && words.length === 0)
115
117
  return [];
@@ -139,7 +141,7 @@ function locatorCandidates(error, observation, redact, appOrigin) {
139
141
  return scored
140
142
  .toSorted((a, b) => b.score - a.score)
141
143
  .slice(0, MAX_CANDIDATES)
142
- .map(({ node }) => truncateUtf8(formatNode(node, 0, redact, appOrigin), MAX_CANDIDATE_BYTES));
144
+ .map(({ node }) => truncateUtf8(formatNode(node, 0, appOrigin), MAX_CANDIDATE_BYTES));
143
145
  }
144
146
  /**
145
147
  * Whether a word on screen is a near miss for one asked for: a typo or an
@@ -157,4 +159,3 @@ function tokens(text) {
157
159
  .split(/[^\p{L}\p{N}]+/u)
158
160
  .filter((word) => word.length > 1);
159
161
  }
160
- //# sourceMappingURL=failure-evidence.js.map
@@ -18,4 +18,3 @@ export declare class FixtureRecorder {
18
18
  /** Executes one declared operation inside its step and cancellation boundary. */
19
19
  private run;
20
20
  }
21
- //# sourceMappingURL=fixture-recording.d.ts.map
@@ -99,4 +99,3 @@ function propertyDescriptor(surface, key) {
99
99
  }
100
100
  return undefined;
101
101
  }
102
- //# sourceMappingURL=fixture-recording.js.map
@@ -68,4 +68,3 @@ export interface AttemptFixtures {
68
68
  readonly agentRuntime: AgentContext;
69
69
  }
70
70
  export declare function createFixtures(environment: AttemptEnvironment): AttemptFixtures;
71
- //# sourceMappingURL=fixtures.d.ts.map
@@ -311,20 +311,18 @@ function createApp(environment, engine, exposure) {
311
311
  * `app.open()` on a target with no URL and no `navigate`, a device: it
312
312
  * launches the pinned app fresh, the way Maestro's `launchApp` does, and is
313
313
  * what a test calls before it looks at the screen. A path has nowhere to
314
- * go there; a link goes through `device.openLink`.
314
+ * go there; a link goes through `device.openLink`. An engine without a
315
+ * relaunch hook is refused here; one with a hook reports its own reason it
316
+ * cannot launch, such as a build not installed yet.
315
317
  */
316
318
  const launchPinnedApp = (openPath) => steps.run('app', 'app.open', '', async () => {
317
319
  if (openPath !== undefined) {
318
320
  throw new ConfigurationError('APP_URL_REQUIRED', `app.open("${openPath}") needs an app URL and target "${target.name}" has none: on a device app.open() launches the pinned app, and a link goes through device.openLink`);
319
321
  }
320
- try {
321
- await engine.session.app.restart(engine.operation(config.timeout));
322
- }
323
- catch (cause) {
324
- if (cause.code !== 'UNSUPPORTED_CAPABILITY')
325
- throw cause;
326
- throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `app.open() has no app to launch on target "${target.name}": pin one with the target's app.bundleId or app.appPath, or bring one up with device.openApp`);
322
+ if (target.engine?.session?.restart === undefined) {
323
+ throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `app.open() has nothing to open on target "${target.name}": it has no app URL, and engine ${target.engine?.name ?? 'none'} does not relaunch a pinned app`);
327
324
  }
325
+ await engine.session.app.restart(engine.operation(config.timeout));
328
326
  });
329
327
  return {
330
328
  baseUrl: target.app.base?.href,
@@ -355,4 +353,3 @@ function lazily(build) {
355
353
  let built;
356
354
  return () => (built ??= { value: build() }).value;
357
355
  }
358
- //# sourceMappingURL=fixtures.js.map
@@ -28,6 +28,8 @@ export interface InProcessRunnerOptions {
28
28
  }) | undefined;
29
29
  readonly runId: string;
30
30
  readonly artifactsRoot: string;
31
+ /** See `TargetExecutorOptions.rerunDir`. */
32
+ readonly rerunDir: string | undefined;
31
33
  readonly sessionStore: SessionStore;
32
34
  readonly headed: boolean;
33
35
  readonly debug: DebugTrace;
@@ -36,4 +38,3 @@ export interface InProcessRunnerOptions {
36
38
  }
37
39
  /** Creates the spawn factory the scheduler uses for in-process execution. */
38
40
  export declare function inProcessSpawner(options: InProcessRunnerOptions): SpawnUnitRunner;
39
- //# sourceMappingURL=in-process.d.ts.map
@@ -101,6 +101,7 @@ class InProcessRunner {
101
101
  sessionStore: this.options.sessionStore,
102
102
  runId: this.options.runId,
103
103
  artifactsRoot: this.options.artifactsRoot,
104
+ rerunDir: this.options.rerunDir,
104
105
  headed: this.options.headed,
105
106
  workerSlot: this.workerSlot,
106
107
  env: this.options.envFor(this.targetName),
@@ -132,4 +133,3 @@ async function resolveFromSelection(selection, target, unit, registration) {
132
133
  export function inProcessSpawner(options) {
133
134
  return (targetName, workerSlot, events) => new InProcessRunner(targetName, workerSlot, events, options);
134
135
  }
135
- //# sourceMappingURL=in-process.js.map
@@ -1,5 +1,6 @@
1
1
  /** What `--last-failed` reads back from the previous run's report. */
2
2
  import type { Report1Document } from '../report/build.ts';
3
+ type ReportCarried = NonNullable<Report1Document['run']['carried']>;
3
4
  /**
4
5
  * The previous run's report, read from where this run will write its own. It
5
6
  * is what `--last-failed` selects from, and reporters receive it as
@@ -9,14 +10,46 @@ import type { Report1Document } from '../report/build.ts';
9
10
  export declare function readLastRun(reportPath: string): Promise<Report1Document>;
10
11
  /**
11
12
  * The result ids of a report's tests that did not pass: failed, timed out,
12
- * interrupted, or skipped because a setup, a serial predecessor, a hook, or
13
- * the worker failed, and every selected test in the scope of a `beforeAll` or
14
- * `afterAll` that failed, until a run where that hook passes. A report older
15
- * than `selected` counts every result as selected. An explicit
16
- * skip and a filtered test passed in the sense that matters here: nothing to
17
- * run again. The ids are `resultId(testId, target, agent)`, so a test is
18
- * named per target and agent whichever of its `--repeat-each` runs did not
19
- * pass.
13
+ * interrupted, or skipped because a setup, a serial predecessor, a hook, the
14
+ * worker, or the failure limit stopped it, every selected test in the scope
15
+ * of a `beforeAll` or `afterAll` that failed, until a run where that hook
16
+ * passes, and every test the report carries from an earlier run that it did
17
+ * not run again. A report older than `selected` counts every result as
18
+ * selected. An explicit skip and a filtered test passed in the sense that
19
+ * matters here: nothing to run again. The ids are
20
+ * `resultId(testId, target, agent)`, so a test is named per target and agent
21
+ * whichever of its `--repeat-each` runs did not pass.
20
22
  */
21
23
  export declare function lastFailedIds(document: Report1Document): ReadonlySet<string>;
22
- //# sourceMappingURL=last-run.d.ts.map
24
+ /** What a rerun's collection found: the tests it collected by id, and the files it discovered but could not collect. */
25
+ export interface RerunCollection {
26
+ readonly testIds: ReadonlySet<string>;
27
+ readonly uncollectedFiles: ReadonlySet<string>;
28
+ }
29
+ /**
30
+ * What a `--last-failed` rerun carries forward from the report it selected
31
+ * from: every result that report owed a rerun and this run did not run, as
32
+ * the run that last ran it reported it; the serial groups those results'
33
+ * attempts live on; and the suite hook failures whose scope still holds one
34
+ * of them. A result is owed when it did not pass, or when it is in the scope
35
+ * of a failed `beforeAll` or `afterAll` this run did not see pass: a hook
36
+ * whose scope this run ran again without it failing is resolved, and one
37
+ * that failed again is this run's own error, which still makes its left-out
38
+ * tests owed. A test this run did not run is one it collected (`collected`,
39
+ * by test id), on a target the config still has, that it did not select:
40
+ * left out by a filter, on a target or agent the run did not ask for, or a
41
+ * setup no selected test needed, which the report lists no row for. A test in
42
+ * a file the run found but could not collect (`uncollectedFiles`, a narrowed
43
+ * run past a file that fails to import) is still there and stays carried. A
44
+ * test the run no longer collects cannot run again and is dropped. A test
45
+ * this run selected is no longer carried, whatever its outcome: its own
46
+ * result says it now. Undefined when nothing is carried.
47
+ */
48
+ export declare function carryForward(lastRun: Report1Document, current: Report1Document, collected: RerunCollection): ReportCarried | undefined;
49
+ /**
50
+ * The artifact paths a report names, relative to the artifacts root: every
51
+ * attempt's of its results and serial groups, and of what it carries. What a
52
+ * `--last-failed` rerun keeps of the tree when it starts.
53
+ */
54
+ export declare function reportArtifactPaths(document: Report1Document): ReadonlySet<string>;
55
+ export {};
@@ -8,7 +8,16 @@ const UNDELIVERED_SKIPS = new Set([
8
8
  'serial-predecessor-failed',
9
9
  'hook-failed',
10
10
  'infrastructure-unavailable',
11
+ 'failure-limit',
11
12
  ]);
13
+ /** The id `--last-failed` names a result by: its test, target, and agent, whichever its repeat. */
14
+ function rerunId(result) {
15
+ return resultId(result.testId, result.targetId, result.agent);
16
+ }
17
+ /** Whether a run error is a failed `beforeAll` or `afterAll`, the failures `--last-failed` runs the scope of again. */
18
+ function isSuiteHookFailure(error) {
19
+ return error.phase === 'beforeAll' || error.phase === 'afterAll';
20
+ }
12
21
  /** Whether a result is one `--last-failed` runs again: it did not pass, or the run never got to it. */
13
22
  function didNotPass(result) {
14
23
  switch (result.status) {
@@ -72,19 +81,88 @@ export async function readLastRun(reportPath) {
72
81
  }
73
82
  /**
74
83
  * The result ids of a report's tests that did not pass: failed, timed out,
75
- * interrupted, or skipped because a setup, a serial predecessor, a hook, or
76
- * the worker failed, and every selected test in the scope of a `beforeAll` or
77
- * `afterAll` that failed, until a run where that hook passes. A report older
78
- * than `selected` counts every result as selected. An explicit
79
- * skip and a filtered test passed in the sense that matters here: nothing to
80
- * run again. The ids are `resultId(testId, target, agent)`, so a test is
81
- * named per target and agent whichever of its `--repeat-each` runs did not
82
- * pass.
84
+ * interrupted, or skipped because a setup, a serial predecessor, a hook, the
85
+ * worker, or the failure limit stopped it, every selected test in the scope
86
+ * of a `beforeAll` or `afterAll` that failed, until a run where that hook
87
+ * passes, and every test the report carries from an earlier run that it did
88
+ * not run again. A report older than `selected` counts every result as
89
+ * selected. An explicit skip and a filtered test passed in the sense that
90
+ * matters here: nothing to run again. The ids are
91
+ * `resultId(testId, target, agent)`, so a test is named per target and agent
92
+ * whichever of its `--repeat-each` runs did not pass.
83
93
  */
84
94
  export function lastFailedIds(document) {
85
- const hookFailures = document.run.errors.filter((error) => error.phase === 'beforeAll' || error.phase === 'afterAll');
95
+ const hookFailures = document.run.errors.filter(isSuiteHookFailure);
86
96
  const rerun = (result) => didNotPass(result) || (result.selected !== false && hookFailures.some((error) => inHookScope(result, error)));
87
- return new Set(document.run.results.filter(rerun).map((result) => resultId(result.testId, result.targetId, result.agent)));
97
+ const ids = new Set(document.run.results.filter(rerun).map(rerunId));
98
+ for (const result of document.run.carried?.results ?? [])
99
+ ids.add(rerunId(result));
100
+ return ids;
101
+ }
102
+ /** Whether two suite hook failures are the same hook's: one phase, one scope. */
103
+ function sameHook(a, b) {
104
+ if (a.phase !== b.phase)
105
+ return false;
106
+ if (a.scope === undefined || b.scope === undefined)
107
+ return a.scope === b.scope;
108
+ return (a.scope.file === b.scope.file &&
109
+ a.scope.targetId === b.scope.targetId &&
110
+ a.scope.titlePath.length === b.scope.titlePath.length &&
111
+ a.scope.titlePath.every((title, index) => b.scope.titlePath[index] === title));
112
+ }
113
+ /**
114
+ * What a `--last-failed` rerun carries forward from the report it selected
115
+ * from: every result that report owed a rerun and this run did not run, as
116
+ * the run that last ran it reported it; the serial groups those results'
117
+ * attempts live on; and the suite hook failures whose scope still holds one
118
+ * of them. A result is owed when it did not pass, or when it is in the scope
119
+ * of a failed `beforeAll` or `afterAll` this run did not see pass: a hook
120
+ * whose scope this run ran again without it failing is resolved, and one
121
+ * that failed again is this run's own error, which still makes its left-out
122
+ * tests owed. A test this run did not run is one it collected (`collected`,
123
+ * by test id), on a target the config still has, that it did not select:
124
+ * left out by a filter, on a target or agent the run did not ask for, or a
125
+ * setup no selected test needed, which the report lists no row for. A test in
126
+ * a file the run found but could not collect (`uncollectedFiles`, a narrowed
127
+ * run past a file that fails to import) is still there and stays carried. A
128
+ * test the run no longer collects cannot run again and is dropped. A test
129
+ * this run selected is no longer carried, whatever its outcome: its own
130
+ * result says it now. Undefined when nothing is carried.
131
+ */
132
+ export function carryForward(lastRun, current, collected) {
133
+ const selected = new Set(current.run.results.filter((result) => result.selected !== false).map(rerunId));
134
+ const targets = new Set(current.run.targets.map((target) => target.id));
135
+ const stillThere = (result) => collected.testIds.has(result.testId) || collected.uncollectedFiles.has(result.file);
136
+ const notRun = (result) => !selected.has(rerunId(result)) && stillThere(result) && targets.has(result.targetId);
137
+ const failedAgain = current.run.errors.filter(isSuiteHookFailure);
138
+ const hooks = [...lastRun.run.errors.filter(isSuiteHookFailure), ...(lastRun.run.carried?.errors ?? [])];
139
+ const reportedAgain = (error) => failedAgain.some((again) => sameHook(again, error));
140
+ const passedAgain = (error) => !reportedAgain(error) &&
141
+ current.run.results.some((result) => result.selected !== false && result.status !== 'skipped' && inHookScope(result, error));
142
+ const unresolved = hooks.filter((error) => !passedAgain(error));
143
+ // A test the run before left out is known by the row it carried, not by its filtered one.
144
+ const history = [...lastRun.run.results.filter((result) => result.selected !== false), ...(lastRun.run.carried?.results ?? [])];
145
+ const results = history.filter((result) => notRun(result) && (didNotPass(result) || unresolved.some((error) => inHookScope(result, error))));
146
+ if (results.length === 0)
147
+ return undefined;
148
+ const groupIds = new Set(results.flatMap((result) => (result.serialGroupId === undefined ? [] : [result.serialGroupId])));
149
+ const currentGroupIds = new Set(current.run.serialGroups.map((group) => group.id));
150
+ const serialGroups = [...lastRun.run.serialGroups, ...(lastRun.run.carried?.serialGroups ?? [])].filter((group) => groupIds.has(group.id) && !currentGroupIds.has(group.id));
151
+ const errors = unresolved.filter((error) => !reportedAgain(error) && results.some((result) => inHookScope(result, error)));
152
+ return { results, serialGroups, errors };
153
+ }
154
+ /**
155
+ * The artifact paths a report names, relative to the artifacts root: every
156
+ * attempt's of its results and serial groups, and of what it carries. What a
157
+ * `--last-failed` rerun keeps of the tree when it starts.
158
+ */
159
+ export function reportArtifactPaths(document) {
160
+ const parts = [document.run, ...(document.run.carried === undefined ? [] : [document.run.carried])];
161
+ const attempts = parts.flatMap((part) => [
162
+ ...part.results.flatMap((result) => result.attempts),
163
+ ...part.serialGroups.flatMap((group) => group.attempts),
164
+ ]);
165
+ return new Set(attempts.flatMap((attempt) => attempt.artifacts.flatMap((artifact) => (artifact.path === undefined ? [] : [artifact.path]))));
88
166
  }
89
167
  /**
90
168
  * The shape the read relies on: a report-1 envelope whose every result has
@@ -96,10 +174,38 @@ function isReport(value) {
96
174
  return false;
97
175
  const document = value;
98
176
  return (document.schemaVersion === 'report-1' &&
99
- Array.isArray(document.run?.results) &&
100
- document.run.results.every(isResult) &&
101
- Array.isArray(document.run.errors) &&
102
- document.run.errors.every(isError));
177
+ isRunPart(document.run) &&
178
+ (document.run.carried === undefined || isRunPart(document.run.carried)));
179
+ }
180
+ /** A run, or what one carries: results and errors of the shape read here, and its serial groups. */
181
+ function isRunPart(value) {
182
+ if (typeof value !== 'object' || value === null)
183
+ return false;
184
+ const part = value;
185
+ return (Array.isArray(part.results) &&
186
+ part.results.every(isResult) &&
187
+ Array.isArray(part.errors) &&
188
+ part.errors.every(isError) &&
189
+ Array.isArray(part.serialGroups) &&
190
+ part.serialGroups.every((group) => typeof group === 'object' && group !== null && hasAttempts(group)));
191
+ }
192
+ /** Whether a result or serial group lists its attempts, each with its artifacts, the way a rerun reads them. */
193
+ function hasAttempts(value) {
194
+ const { attempts } = value;
195
+ return Array.isArray(attempts) && attempts.every(hasArtifacts);
196
+ }
197
+ /** Whether an attempt lists its artifacts as records whose path, when there is one, is a string. */
198
+ function hasArtifacts(attempt) {
199
+ if (typeof attempt !== 'object' || attempt === null)
200
+ return false;
201
+ const { artifacts } = attempt;
202
+ return (Array.isArray(artifacts) &&
203
+ artifacts.every((artifact) => {
204
+ if (typeof artifact !== 'object' || artifact === null)
205
+ return false;
206
+ const { path } = artifact;
207
+ return path === undefined || typeof path === 'string';
208
+ }));
103
209
  }
104
210
  function isResult(value) {
105
211
  if (typeof value !== 'object' || value === null)
@@ -110,6 +216,7 @@ function isResult(value) {
110
216
  typeof result.status === 'string' &&
111
217
  typeof result.file === 'string' &&
112
218
  Array.isArray(result.titlePath) &&
219
+ hasAttempts(result) &&
113
220
  (skip === undefined || (typeof skip === 'object' && skip !== null && typeof skip.cause === 'string')));
114
221
  }
115
222
  function isError(value) {
@@ -124,4 +231,3 @@ function isError(value) {
124
231
  typeof scope.targetId === 'string' &&
125
232
  Array.isArray(scope.titlePath))));
126
233
  }
127
- //# sourceMappingURL=last-run.js.map
@@ -95,4 +95,3 @@ export interface AppProcesses {
95
95
  */
96
96
  stop(onFailure: (cause: unknown) => void): Promise<void>;
97
97
  }
98
- //# sourceMappingURL=managed-process.d.ts.map
@@ -343,4 +343,3 @@ export class ManagedProcess {
343
343
  }
344
344
  }
345
345
  }
346
- //# sourceMappingURL=managed-process.js.map
@@ -17,4 +17,3 @@ export interface OutputLayout {
17
17
  }
18
18
  /** The fixed paths under the absolute output directory `output`. */
19
19
  export declare function outputLayout(output: string): OutputLayout;
20
- //# sourceMappingURL=output.d.ts.map
@@ -14,4 +14,3 @@ export function outputLayout(output) {
14
14
  videos: (sessionId) => path.join(output, 'videos', sessionId),
15
15
  };
16
16
  }
17
- //# sourceMappingURL=output.js.map
@@ -38,4 +38,3 @@ export declare class SharedAppProcesses implements ProcessPool {
38
38
  /** Drops `entry` from the pool, unless a fresh start already took its key. */
39
39
  private forget;
40
40
  }
41
- //# sourceMappingURL=process-pool.d.ts.map
@@ -108,4 +108,3 @@ function cancelled(signal, started) {
108
108
  started.then(forget, forget);
109
109
  });
110
110
  }
111
- //# sourceMappingURL=process-pool.js.map