e2e 0.15.1 → 0.16.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 (1019) hide show
  1. package/README.md +51 -24
  2. package/dist/.build.json +1 -1
  3. package/dist/agent/act-validation.d.ts +10 -1
  4. package/dist/agent/act-validation.js +48 -1
  5. package/dist/agent/act.d.ts +1 -2
  6. package/dist/agent/act.js +25 -8
  7. package/dist/agent/action-dispatcher.d.ts +0 -1
  8. package/dist/agent/action-dispatcher.js +0 -1
  9. package/dist/agent/action-names.d.ts +0 -1
  10. package/dist/agent/action-names.js +0 -1
  11. package/dist/agent/actions.d.ts +0 -1
  12. package/dist/agent/actions.js +0 -1
  13. package/dist/agent/agent-brand.d.ts +0 -1
  14. package/dist/agent/agent-brand.js +0 -1
  15. package/dist/agent/ai-sdk.d.ts +7 -1
  16. package/dist/agent/ai-sdk.js +11 -1
  17. package/dist/agent/call-options.d.ts +0 -1
  18. package/dist/agent/call-options.js +0 -1
  19. package/dist/agent/default-agent.d.ts +0 -1
  20. package/dist/agent/default-agent.js +0 -1
  21. package/dist/agent/derived.d.ts +0 -1
  22. package/dist/agent/derived.js +0 -1
  23. package/dist/agent/error.d.ts +16 -4
  24. package/dist/agent/error.js +25 -7
  25. package/dist/agent/executor.d.ts +0 -1
  26. package/dist/agent/executor.js +0 -1
  27. package/dist/agent/index.d.ts +0 -1
  28. package/dist/agent/index.js +0 -1
  29. package/dist/agent/interactive-step.d.ts +0 -1
  30. package/dist/agent/interactive-step.js +0 -1
  31. package/dist/agent/invocation.d.ts +0 -1
  32. package/dist/agent/invocation.js +10 -5
  33. package/dist/agent/ledger.d.ts +0 -1
  34. package/dist/agent/ledger.js +0 -1
  35. package/dist/agent/loop-guards.d.ts +0 -1
  36. package/dist/agent/loop-guards.js +0 -1
  37. package/dist/agent/model/adapter.d.ts +0 -1
  38. package/dist/agent/model/adapter.js +0 -1
  39. package/dist/agent/model/overflow.d.ts +0 -1
  40. package/dist/agent/model/overflow.js +0 -1
  41. package/dist/agent/model/provider-hints.d.ts +0 -1
  42. package/dist/agent/model/provider-hints.js +0 -1
  43. package/dist/agent/model/schema.d.ts +0 -1
  44. package/dist/agent/model/schema.js +0 -1
  45. package/dist/agent/model/sdk.d.ts +0 -1
  46. package/dist/agent/model/sdk.js +0 -1
  47. package/dist/agent/model/stall.d.ts +0 -1
  48. package/dist/agent/model/stall.js +0 -1
  49. package/dist/agent/model/tool-choice.d.ts +24 -2
  50. package/dist/agent/model/tool-choice.js +27 -2
  51. package/dist/agent/observation-budget.d.ts +0 -1
  52. package/dist/agent/observation-budget.js +0 -1
  53. package/dist/agent/observation-feed.d.ts +0 -1
  54. package/dist/agent/observation-feed.js +0 -1
  55. package/dist/agent/observation.d.ts +0 -1
  56. package/dist/agent/observation.js +0 -1
  57. package/dist/agent/operation-queue.d.ts +0 -1
  58. package/dist/agent/operation-queue.js +0 -1
  59. package/dist/agent/phases.d.ts +0 -1
  60. package/dist/agent/phases.js +0 -1
  61. package/dist/agent/pixels.d.ts +0 -1
  62. package/dist/agent/pixels.js +0 -1
  63. package/dist/agent/point-tap.d.ts +0 -1
  64. package/dist/agent/point-tap.js +0 -1
  65. package/dist/agent/primitives.d.ts +6 -1
  66. package/dist/agent/primitives.js +4 -2
  67. package/dist/agent/prompts.d.ts +0 -1
  68. package/dist/agent/prompts.js +0 -1
  69. package/dist/agent/protocol.d.ts +0 -1
  70. package/dist/agent/protocol.js +0 -1
  71. package/dist/agent/public.d.ts +0 -1
  72. package/dist/agent/public.js +0 -1
  73. package/dist/agent/reading.d.ts +0 -1
  74. package/dist/agent/reading.js +0 -1
  75. package/dist/agent/replay.d.ts +0 -1
  76. package/dist/agent/replay.js +0 -1
  77. package/dist/agent/screen-update.d.ts +0 -1
  78. package/dist/agent/screen-update.js +0 -1
  79. package/dist/agent/scroll-target.d.ts +0 -1
  80. package/dist/agent/scroll-target.js +0 -1
  81. package/dist/agent/secrets.d.ts +0 -1
  82. package/dist/agent/secrets.js +0 -1
  83. package/dist/agent/settle-policy.d.ts +0 -1
  84. package/dist/agent/settle-policy.js +0 -1
  85. package/dist/agent/step-accounting.d.ts +0 -1
  86. package/dist/agent/step-accounting.js +0 -1
  87. package/dist/agent/step-cache.d.ts +14 -4
  88. package/dist/agent/step-cache.js +13 -4
  89. package/dist/agent/tool-loop.d.ts +0 -1
  90. package/dist/agent/tool-loop.js +62 -10
  91. package/dist/agent/tool-output.d.ts +0 -1
  92. package/dist/agent/tool-output.js +0 -1
  93. package/dist/agent/tool.d.ts +0 -1
  94. package/dist/agent/tool.js +0 -1
  95. package/dist/agent/transcript-compaction.d.ts +0 -1
  96. package/dist/agent/transcript-compaction.js +0 -1
  97. package/dist/agent/upload-paths.d.ts +0 -1
  98. package/dist/agent/upload-paths.js +0 -1
  99. package/dist/agent/usage.d.ts +0 -1
  100. package/dist/agent/usage.js +0 -1
  101. package/dist/cache/anchors.d.ts +0 -1
  102. package/dist/cache/anchors.js +0 -1
  103. package/dist/cache/context.d.ts +19 -7
  104. package/dist/cache/context.js +15 -22
  105. package/dist/cache/decide.d.ts +0 -1
  106. package/dist/cache/decide.js +0 -1
  107. package/dist/cache/identity.d.ts +0 -1
  108. package/dist/cache/identity.js +0 -1
  109. package/dist/cache/recorder.d.ts +0 -1
  110. package/dist/cache/recorder.js +0 -1
  111. package/dist/cache/relocate.d.ts +0 -1
  112. package/dist/cache/relocate.js +0 -1
  113. package/dist/cache/route.d.ts +0 -1
  114. package/dist/cache/route.js +0 -1
  115. package/dist/cache/store.d.ts +0 -1
  116. package/dist/cache/store.js +0 -1
  117. package/dist/cache/template.d.ts +0 -1
  118. package/dist/cache/template.js +0 -1
  119. package/dist/cache/trace.d.ts +0 -1
  120. package/dist/cache/trace.js +0 -1
  121. package/dist/cli/bin.d.ts +0 -1
  122. package/dist/cli/bin.js +0 -1
  123. package/dist/cli/cache.d.ts +0 -1
  124. package/dist/cli/cache.js +0 -1
  125. package/dist/cli/docs-url.d.ts +0 -1
  126. package/dist/cli/docs-url.js +0 -1
  127. package/dist/cli/feedback.d.ts +0 -1
  128. package/dist/cli/feedback.js +0 -1
  129. package/dist/cli/guide.d.ts +0 -1
  130. package/dist/cli/guide.js +0 -1
  131. package/dist/cli/index.d.ts +0 -1
  132. package/dist/cli/index.js +2 -3
  133. package/dist/cli/init/agent-skill.d.ts +0 -1
  134. package/dist/cli/init/agent-skill.js +0 -1
  135. package/dist/cli/init/engines.d.ts +0 -1
  136. package/dist/cli/init/engines.js +0 -1
  137. package/dist/cli/init/gateways.d.ts +0 -1
  138. package/dist/cli/init/gateways.js +0 -1
  139. package/dist/cli/init/mcp-config.d.ts +0 -1
  140. package/dist/cli/init/mcp-config.js +0 -1
  141. package/dist/cli/init/package.d.ts +0 -1
  142. package/dist/cli/init/package.js +0 -1
  143. package/dist/cli/init/scaffold.d.ts +1 -1
  144. package/dist/cli/init/scaffold.js +2 -2
  145. package/dist/cli/init/sibling-versions.json +1 -1
  146. package/dist/cli/init/versions.d.ts +0 -1
  147. package/dist/cli/init/versions.js +0 -1
  148. package/dist/cli/init.d.ts +0 -1
  149. package/dist/cli/init.js +0 -1
  150. package/dist/cli/mcp.d.ts +9 -2
  151. package/dist/cli/mcp.js +14 -2
  152. package/dist/cli/signals.d.ts +0 -1
  153. package/dist/cli/signals.js +0 -1
  154. package/dist/cli/skill.d.ts +0 -1
  155. package/dist/cli/skill.js +0 -1
  156. package/dist/cli/telemetry.d.ts +0 -1
  157. package/dist/cli/telemetry.js +1 -2
  158. package/dist/cli/wordmark.d.ts +0 -1
  159. package/dist/cli/wordmark.js +0 -1
  160. package/dist/collect/collect.d.ts +0 -1
  161. package/dist/collect/collect.js +3 -2
  162. package/dist/collect/registry.d.ts +6 -3
  163. package/dist/collect/registry.js +31 -14
  164. package/dist/collect/select.d.ts +0 -1
  165. package/dist/collect/select.js +0 -1
  166. package/dist/config/agent.d.ts +0 -1
  167. package/dist/config/agent.js +0 -1
  168. package/dist/config/app.d.ts +0 -1
  169. package/dist/config/app.js +0 -1
  170. package/dist/config/command.d.ts +0 -1
  171. package/dist/config/command.js +0 -1
  172. package/dist/config/diagnose.d.ts +0 -1
  173. package/dist/config/diagnose.js +0 -1
  174. package/dist/config/esm-hooks.d.ts +0 -1
  175. package/dist/config/esm-hooks.js +0 -1
  176. package/dist/config/load.d.ts +0 -1
  177. package/dist/config/load.js +0 -1
  178. package/dist/config/resolve.d.ts +0 -1
  179. package/dist/config/resolve.js +0 -1
  180. package/dist/config/secrets.d.ts +0 -1
  181. package/dist/config/secrets.js +0 -1
  182. package/dist/config/targets.d.ts +0 -1
  183. package/dist/config/targets.js +0 -1
  184. package/dist/config/validate.d.ts +0 -1
  185. package/dist/config/validate.js +0 -1
  186. package/dist/engine/contract.d.ts +0 -1
  187. package/dist/engine/contract.js +0 -1
  188. package/dist/engine/index.d.ts +1 -2
  189. package/dist/engine/index.js +4 -4
  190. package/dist/engine/manifest.d.ts +0 -1
  191. package/dist/engine/manifest.js +0 -1
  192. package/dist/engine/recording.d.ts +0 -1
  193. package/dist/engine/recording.js +0 -1
  194. package/dist/engine/resolve.d.ts +0 -1
  195. package/dist/engine/resolve.js +0 -1
  196. package/dist/engine/session.d.ts +0 -1
  197. package/dist/engine/session.js +0 -1
  198. package/dist/engine/surface.d.ts +0 -1
  199. package/dist/engine/surface.js +0 -1
  200. package/dist/engine/timing.d.ts +0 -1
  201. package/dist/engine/timing.js +0 -1
  202. package/dist/expect/async.d.ts +0 -1
  203. package/dist/expect/async.js +99 -58
  204. package/dist/expect/attempt.d.ts +0 -1
  205. package/dist/expect/attempt.js +0 -1
  206. package/dist/expect/index.d.ts +0 -1
  207. package/dist/expect/index.js +0 -1
  208. package/dist/expect/poll.d.ts +0 -1
  209. package/dist/expect/poll.js +0 -1
  210. package/dist/expect/soft.d.ts +0 -1
  211. package/dist/expect/soft.js +0 -1
  212. package/dist/expect/values.d.ts +0 -1
  213. package/dist/expect/values.js +1 -2
  214. package/dist/explore/body.d.ts +0 -1
  215. package/dist/explore/body.js +0 -1
  216. package/dist/explore/executor.d.ts +0 -1
  217. package/dist/explore/executor.js +0 -1
  218. package/dist/explore/index.d.ts +0 -1
  219. package/dist/explore/index.js +16 -2
  220. package/dist/explore/plan.d.ts +0 -1
  221. package/dist/explore/plan.js +0 -1
  222. package/dist/explore/progress.d.ts +0 -1
  223. package/dist/explore/progress.js +0 -1
  224. package/dist/explore/state.d.ts +0 -1
  225. package/dist/explore/state.js +0 -1
  226. package/dist/index.d.ts +0 -1
  227. package/dist/index.js +0 -1
  228. package/dist/internal/ai-trace.d.ts +0 -1
  229. package/dist/internal/ai-trace.js +0 -1
  230. package/dist/internal/atomic-write.d.ts +0 -1
  231. package/dist/internal/atomic-write.js +0 -1
  232. package/dist/internal/brands.d.ts +0 -1
  233. package/dist/internal/brands.js +0 -1
  234. package/dist/internal/debug.d.ts +0 -1
  235. package/dist/internal/debug.js +0 -1
  236. package/dist/internal/env.d.ts +0 -1
  237. package/dist/internal/env.js +0 -1
  238. package/dist/internal/errors.d.ts +0 -1
  239. package/dist/internal/errors.js +0 -1
  240. package/dist/internal/geometry.d.ts +0 -1
  241. package/dist/internal/geometry.js +0 -1
  242. package/dist/internal/git.d.ts +0 -1
  243. package/dist/internal/git.js +0 -1
  244. package/dist/internal/globs.d.ts +0 -1
  245. package/dist/internal/globs.js +0 -1
  246. package/dist/internal/ids.d.ts +0 -1
  247. package/dist/internal/ids.js +0 -1
  248. package/dist/internal/json-value.d.ts +0 -1
  249. package/dist/internal/json-value.js +0 -1
  250. package/dist/internal/keys.d.ts +0 -1
  251. package/dist/internal/keys.js +0 -1
  252. package/dist/internal/node-version.d.ts +0 -1
  253. package/dist/internal/node-version.js +0 -1
  254. package/dist/internal/objects.d.ts +0 -1
  255. package/dist/internal/objects.js +0 -1
  256. package/dist/internal/options.d.ts +0 -1
  257. package/dist/internal/options.js +0 -1
  258. package/dist/internal/package-manager.d.ts +0 -1
  259. package/dist/internal/package-manager.js +0 -1
  260. package/dist/internal/package-version.d.ts +0 -1
  261. package/dist/internal/package-version.js +0 -1
  262. package/dist/internal/paths.d.ts +0 -1
  263. package/dist/internal/paths.js +0 -1
  264. package/dist/internal/realm-slot.d.ts +0 -1
  265. package/dist/internal/realm-slot.js +0 -1
  266. package/dist/internal/recording-modes.d.ts +0 -1
  267. package/dist/internal/recording-modes.js +0 -1
  268. package/dist/internal/redact.d.ts +0 -1
  269. package/dist/internal/redact.js +0 -1
  270. package/dist/internal/regexp.d.ts +0 -1
  271. package/dist/internal/regexp.js +0 -1
  272. package/dist/internal/roles.d.ts +0 -1
  273. package/dist/internal/roles.js +0 -1
  274. package/dist/internal/skip.d.ts +0 -1
  275. package/dist/internal/skip.js +0 -1
  276. package/dist/internal/source.d.ts +0 -1
  277. package/dist/internal/source.js +0 -1
  278. package/dist/internal/standard-schema.d.ts +0 -1
  279. package/dist/internal/standard-schema.js +0 -1
  280. package/dist/internal/suggest.d.ts +0 -1
  281. package/dist/internal/suggest.js +0 -1
  282. package/dist/internal/text.d.ts +8 -1
  283. package/dist/internal/text.js +13 -2
  284. package/dist/internal/time.d.ts +0 -1
  285. package/dist/internal/time.js +0 -1
  286. package/dist/internal/urls.d.ts +0 -1
  287. package/dist/internal/urls.js +0 -1
  288. package/dist/internal/vcs.d.ts +0 -1
  289. package/dist/internal/vcs.js +0 -1
  290. package/dist/internal/zip.d.ts +0 -1
  291. package/dist/internal/zip.js +0 -1
  292. package/dist/locator/engine.d.ts +0 -1
  293. package/dist/locator/engine.js +0 -1
  294. package/dist/locator/expression.d.ts +0 -1
  295. package/dist/locator/expression.js +0 -1
  296. package/dist/locator/screen.d.ts +0 -1
  297. package/dist/locator/screen.js +0 -1
  298. package/dist/mcp/catalog.d.ts +4 -1
  299. package/dist/mcp/catalog.js +2 -3
  300. package/dist/mcp/config.d.ts +0 -1
  301. package/dist/mcp/config.js +0 -1
  302. package/dist/mcp/recording.d.ts +0 -1
  303. package/dist/mcp/recording.js +0 -1
  304. package/dist/mcp/server.d.ts +8 -1
  305. package/dist/mcp/server.js +8 -5
  306. package/dist/mcp/session.d.ts +4 -2
  307. package/dist/mcp/session.js +43 -21
  308. package/dist/mcp/sessions.d.ts +2 -1
  309. package/dist/mcp/sessions.js +5 -2
  310. package/dist/mcp/tools.d.ts +7 -6
  311. package/dist/mcp/tools.js +36 -11
  312. package/dist/mcp/usage.d.ts +61 -0
  313. package/dist/mcp/usage.js +73 -0
  314. package/dist/oauth/callback-server.d.ts +0 -1
  315. package/dist/oauth/callback-server.js +0 -1
  316. package/dist/oauth/chatgpt.d.ts +0 -1
  317. package/dist/oauth/chatgpt.js +0 -1
  318. package/dist/oauth/cli.d.ts +0 -1
  319. package/dist/oauth/cli.js +0 -1
  320. package/dist/oauth/copilot.d.ts +0 -1
  321. package/dist/oauth/copilot.js +0 -1
  322. package/dist/oauth/device-code.d.ts +0 -1
  323. package/dist/oauth/device-code.js +0 -1
  324. package/dist/oauth/errors.d.ts +0 -1
  325. package/dist/oauth/errors.js +0 -1
  326. package/dist/oauth/fetch.d.ts +0 -1
  327. package/dist/oauth/fetch.js +0 -1
  328. package/dist/oauth/grok.d.ts +0 -1
  329. package/dist/oauth/grok.js +0 -1
  330. package/dist/oauth/jwt.d.ts +0 -1
  331. package/dist/oauth/jwt.js +0 -1
  332. package/dist/oauth/login.d.ts +0 -1
  333. package/dist/oauth/login.js +0 -1
  334. package/dist/oauth/models.d.ts +0 -1
  335. package/dist/oauth/models.js +0 -1
  336. package/dist/oauth/pkce.d.ts +0 -1
  337. package/dist/oauth/pkce.js +0 -1
  338. package/dist/oauth/providers/github-copilot.d.ts +0 -1
  339. package/dist/oauth/providers/github-copilot.js +10 -3
  340. package/dist/oauth/providers/openai.d.ts +0 -1
  341. package/dist/oauth/providers/openai.js +1 -2
  342. package/dist/oauth/providers/xai.d.ts +0 -1
  343. package/dist/oauth/providers/xai.js +0 -1
  344. package/dist/oauth/providers.d.ts +0 -1
  345. package/dist/oauth/providers.js +0 -1
  346. package/dist/oauth/sse.d.ts +0 -1
  347. package/dist/oauth/sse.js +0 -1
  348. package/dist/oauth/store.d.ts +0 -1
  349. package/dist/oauth/store.js +0 -1
  350. package/dist/oauth/token-endpoint.d.ts +0 -1
  351. package/dist/oauth/token-endpoint.js +0 -1
  352. package/dist/oauth/types.d.ts +0 -1
  353. package/dist/oauth/types.js +0 -1
  354. package/dist/params.d.ts +0 -1
  355. package/dist/params.js +0 -1
  356. package/dist/report/build.d.ts +0 -1
  357. package/dist/report/build.js +0 -1
  358. package/dist/report/builtin.d.ts +0 -1
  359. package/dist/report/builtin.js +0 -1
  360. package/dist/report/code-frame.d.ts +0 -1
  361. package/dist/report/code-frame.js +0 -1
  362. package/dist/report/debug-steps.d.ts +0 -1
  363. package/dist/report/debug-steps.js +0 -1
  364. package/dist/report/explore-text.d.ts +0 -1
  365. package/dist/report/explore-text.js +0 -1
  366. package/dist/report/failure-text.d.ts +0 -1
  367. package/dist/report/failure-text.js +0 -1
  368. package/dist/report/format.d.ts +0 -1
  369. package/dist/report/format.js +0 -1
  370. package/dist/report/json.d.ts +0 -1
  371. package/dist/report/json.js +0 -1
  372. package/dist/report/junit.d.ts +0 -1
  373. package/dist/report/junit.js +0 -1
  374. package/dist/report/list-explore.d.ts +0 -1
  375. package/dist/report/list-explore.js +0 -1
  376. package/dist/report/list-model.d.ts +0 -1
  377. package/dist/report/list-model.js +0 -1
  378. package/dist/report/list-steps.d.ts +0 -1
  379. package/dist/report/list-steps.js +0 -1
  380. package/dist/report/list.d.ts +0 -1
  381. package/dist/report/list.js +0 -1
  382. package/dist/report/live-window.d.ts +0 -1
  383. package/dist/report/live-window.js +0 -1
  384. package/dist/report/markdown-text.d.ts +0 -1
  385. package/dist/report/markdown-text.js +0 -1
  386. package/dist/report/markdown.d.ts +0 -1
  387. package/dist/report/markdown.js +0 -1
  388. package/dist/report/outcome.d.ts +0 -1
  389. package/dist/report/outcome.js +0 -1
  390. package/dist/report/repeats.d.ts +0 -1
  391. package/dist/report/repeats.js +0 -1
  392. package/dist/report/running-tree.d.ts +0 -1
  393. package/dist/report/running-tree.js +0 -1
  394. package/dist/report/write.d.ts +0 -1
  395. package/dist/report/write.js +0 -1
  396. package/dist/run/app-ports.d.ts +0 -1
  397. package/dist/run/app-ports.js +0 -1
  398. package/dist/run/artifacts.d.ts +0 -1
  399. package/dist/run/artifacts.js +0 -1
  400. package/dist/run/budget.d.ts +0 -1
  401. package/dist/run/budget.js +0 -1
  402. package/dist/run/declared-processes.d.ts +0 -1
  403. package/dist/run/declared-processes.js +0 -1
  404. package/dist/run/events.d.ts +0 -1
  405. package/dist/run/events.js +0 -1
  406. package/dist/run/execute.d.ts +0 -1
  407. package/dist/run/execute.js +27 -13
  408. package/dist/run/extended-fixtures.d.ts +0 -1
  409. package/dist/run/extended-fixtures.js +0 -1
  410. package/dist/run/failure-evidence.d.ts +0 -1
  411. package/dist/run/failure-evidence.js +0 -1
  412. package/dist/run/fixture-recording.d.ts +0 -1
  413. package/dist/run/fixture-recording.js +0 -1
  414. package/dist/run/fixtures.d.ts +0 -1
  415. package/dist/run/fixtures.js +0 -1
  416. package/dist/run/in-process.d.ts +0 -1
  417. package/dist/run/in-process.js +0 -1
  418. package/dist/run/last-run.d.ts +0 -1
  419. package/dist/run/last-run.js +0 -1
  420. package/dist/run/managed-process.d.ts +0 -1
  421. package/dist/run/managed-process.js +0 -1
  422. package/dist/run/output.d.ts +0 -1
  423. package/dist/run/output.js +0 -1
  424. package/dist/run/process-pool.d.ts +0 -1
  425. package/dist/run/process-pool.js +0 -1
  426. package/dist/run/provision.d.ts +0 -1
  427. package/dist/run/provision.js +0 -1
  428. package/dist/run/realm.d.ts +2 -1
  429. package/dist/run/realm.js +1 -2
  430. package/dist/run/records.d.ts +0 -1
  431. package/dist/run/records.js +0 -1
  432. package/dist/run/retry.d.ts +0 -1
  433. package/dist/run/retry.js +0 -1
  434. package/dist/run/runner.d.ts +2 -1
  435. package/dist/run/runner.js +1 -2
  436. package/dist/run/scheduler.d.ts +0 -1
  437. package/dist/run/scheduler.js +0 -1
  438. package/dist/run/secrecy.d.ts +15 -1
  439. package/dist/run/secrecy.js +27 -2
  440. package/dist/run/serial.d.ts +0 -1
  441. package/dist/run/serial.js +0 -1
  442. package/dist/run/sessions.d.ts +0 -1
  443. package/dist/run/sessions.js +0 -1
  444. package/dist/run/standalone.d.ts +0 -1
  445. package/dist/run/standalone.js +3 -3
  446. package/dist/run/steps.d.ts +2 -3
  447. package/dist/run/steps.js +4 -2
  448. package/dist/run/trace-redaction.d.ts +0 -1
  449. package/dist/run/trace-redaction.js +0 -1
  450. package/dist/run/unit-runner.d.ts +0 -1
  451. package/dist/run/unit-runner.js +0 -1
  452. package/dist/run/units.d.ts +0 -1
  453. package/dist/run/units.js +0 -1
  454. package/dist/run/worker/entry.d.ts +0 -1
  455. package/dist/run/worker/entry.js +2 -3
  456. package/dist/run/worker/handle.d.ts +0 -1
  457. package/dist/run/worker/handle.js +0 -1
  458. package/dist/run/worker/protocol.d.ts +0 -1
  459. package/dist/run/worker/protocol.js +0 -1
  460. package/dist/run/worker/session.d.ts +0 -1
  461. package/dist/run/worker/session.js +0 -1
  462. package/dist/run/worker-models.d.ts +0 -1
  463. package/dist/run/worker-models.js +0 -1
  464. package/dist/secrets.d.ts +0 -1
  465. package/dist/secrets.js +0 -1
  466. package/dist/telemetry/checkout.d.ts +0 -1
  467. package/dist/telemetry/checkout.js +0 -1
  468. package/dist/telemetry/environment.d.ts +0 -1
  469. package/dist/telemetry/environment.js +0 -1
  470. package/dist/telemetry/events.d.ts +26 -10
  471. package/dist/telemetry/events.js +107 -13
  472. package/dist/telemetry/failure-kind.d.ts +0 -1
  473. package/dist/telemetry/failure-kind.js +0 -1
  474. package/dist/telemetry/posthog.d.ts +0 -1
  475. package/dist/telemetry/posthog.js +0 -1
  476. package/dist/telemetry/project.d.ts +0 -1
  477. package/dist/telemetry/project.js +0 -1
  478. package/dist/telemetry/store.d.ts +0 -1
  479. package/dist/telemetry/store.js +0 -1
  480. package/dist/telemetry/telemetry.d.ts +19 -8
  481. package/dist/telemetry/telemetry.js +26 -9
  482. package/dist/telemetry/token.d.ts +0 -1
  483. package/dist/telemetry/token.js +0 -1
  484. package/dist/types.d.ts +26 -24
  485. package/dist/types.js +0 -1
  486. package/docs/agent-steps.mdx +126 -0
  487. package/docs/agents.mdx +217 -0
  488. package/docs/api-testing.mdx +65 -0
  489. package/docs/authentication.mdx +345 -0
  490. package/docs/browser.mdx +440 -0
  491. package/docs/bug-bash.mdx +90 -0
  492. package/docs/cache.mdx +306 -0
  493. package/docs/ci.mdx +210 -0
  494. package/docs/coding-agents.mdx +183 -0
  495. package/docs/debugging.mdx +291 -0
  496. package/docs/executors.mdx +243 -0
  497. package/docs/explore.mdx +174 -0
  498. package/docs/github.mdx +184 -0
  499. package/docs/index.mdx +82 -0
  500. package/docs/integrations/eas.mdx +216 -0
  501. package/docs/integrations/index.mdx +24 -0
  502. package/docs/integrations/kernel.mdx +163 -0
  503. package/docs/migrate/cypress.mdx +124 -0
  504. package/docs/migrate/detox.mdx +140 -0
  505. package/docs/migrate/maestro.mdx +229 -0
  506. package/docs/migrate/playwright.mdx +430 -0
  507. package/docs/migrate/selenium.mdx +110 -0
  508. package/docs/mobile-ci.mdx +567 -0
  509. package/docs/mobile.mdx +595 -0
  510. package/docs/models.mdx +241 -0
  511. package/docs/quickstart.mdx +260 -0
  512. package/docs/reference/agent.mdx +524 -0
  513. package/docs/reference/app.mdx +72 -0
  514. package/docs/reference/cli.mdx +819 -0
  515. package/docs/reference/config.mdx +986 -0
  516. package/docs/reference/engine.mdx +1363 -0
  517. package/docs/reference/environment.mdx +113 -0
  518. package/docs/reference/errors.mdx +143 -0
  519. package/docs/reference/expect.mdx +546 -0
  520. package/docs/reference/mcp.mdx +205 -0
  521. package/docs/reference/mobile.mdx +522 -0
  522. package/docs/reference/reporters.mdx +216 -0
  523. package/docs/reference/screen.mdx +688 -0
  524. package/docs/reference/test.mdx +449 -0
  525. package/docs/reference/web.mdx +615 -0
  526. package/docs/security.mdx +308 -0
  527. package/docs/starting-your-app.mdx +231 -0
  528. package/docs/subscriptions.mdx +166 -0
  529. package/docs/telemetry.mdx +227 -0
  530. package/docs/tools.mdx +150 -0
  531. package/docs/viewports.mdx +146 -0
  532. package/docs/writing-an-engine.mdx +316 -0
  533. package/docs/writing-tests.mdx +256 -0
  534. package/package.json +5 -3
  535. package/skills/e2e/SKILL.md +4 -1
  536. package/skills/e2e/references/agent.md +3 -1
  537. package/skills/e2e/references/mcp.md +3 -0
  538. package/skills/e2e/references/setup.md +19 -4
  539. package/skills/e2e/references/writing-tests.md +11 -0
  540. package/dist/agent/act-validation.d.ts.map +0 -1
  541. package/dist/agent/act-validation.js.map +0 -1
  542. package/dist/agent/act.d.ts.map +0 -1
  543. package/dist/agent/act.js.map +0 -1
  544. package/dist/agent/action-dispatcher.d.ts.map +0 -1
  545. package/dist/agent/action-dispatcher.js.map +0 -1
  546. package/dist/agent/action-names.d.ts.map +0 -1
  547. package/dist/agent/action-names.js.map +0 -1
  548. package/dist/agent/actions.d.ts.map +0 -1
  549. package/dist/agent/actions.js.map +0 -1
  550. package/dist/agent/agent-brand.d.ts.map +0 -1
  551. package/dist/agent/agent-brand.js.map +0 -1
  552. package/dist/agent/ai-sdk.d.ts.map +0 -1
  553. package/dist/agent/ai-sdk.js.map +0 -1
  554. package/dist/agent/call-options.d.ts.map +0 -1
  555. package/dist/agent/call-options.js.map +0 -1
  556. package/dist/agent/default-agent.d.ts.map +0 -1
  557. package/dist/agent/default-agent.js.map +0 -1
  558. package/dist/agent/derived.d.ts.map +0 -1
  559. package/dist/agent/derived.js.map +0 -1
  560. package/dist/agent/error.d.ts.map +0 -1
  561. package/dist/agent/error.js.map +0 -1
  562. package/dist/agent/executor.d.ts.map +0 -1
  563. package/dist/agent/executor.js.map +0 -1
  564. package/dist/agent/index.d.ts.map +0 -1
  565. package/dist/agent/index.js.map +0 -1
  566. package/dist/agent/interactive-step.d.ts.map +0 -1
  567. package/dist/agent/interactive-step.js.map +0 -1
  568. package/dist/agent/invocation.d.ts.map +0 -1
  569. package/dist/agent/invocation.js.map +0 -1
  570. package/dist/agent/ledger.d.ts.map +0 -1
  571. package/dist/agent/ledger.js.map +0 -1
  572. package/dist/agent/loop-guards.d.ts.map +0 -1
  573. package/dist/agent/loop-guards.js.map +0 -1
  574. package/dist/agent/model/adapter.d.ts.map +0 -1
  575. package/dist/agent/model/adapter.js.map +0 -1
  576. package/dist/agent/model/overflow.d.ts.map +0 -1
  577. package/dist/agent/model/overflow.js.map +0 -1
  578. package/dist/agent/model/provider-hints.d.ts.map +0 -1
  579. package/dist/agent/model/provider-hints.js.map +0 -1
  580. package/dist/agent/model/schema.d.ts.map +0 -1
  581. package/dist/agent/model/schema.js.map +0 -1
  582. package/dist/agent/model/sdk.d.ts.map +0 -1
  583. package/dist/agent/model/sdk.js.map +0 -1
  584. package/dist/agent/model/stall.d.ts.map +0 -1
  585. package/dist/agent/model/stall.js.map +0 -1
  586. package/dist/agent/model/tool-choice.d.ts.map +0 -1
  587. package/dist/agent/model/tool-choice.js.map +0 -1
  588. package/dist/agent/observation-budget.d.ts.map +0 -1
  589. package/dist/agent/observation-budget.js.map +0 -1
  590. package/dist/agent/observation-feed.d.ts.map +0 -1
  591. package/dist/agent/observation-feed.js.map +0 -1
  592. package/dist/agent/observation.d.ts.map +0 -1
  593. package/dist/agent/observation.js.map +0 -1
  594. package/dist/agent/operation-queue.d.ts.map +0 -1
  595. package/dist/agent/operation-queue.js.map +0 -1
  596. package/dist/agent/phases.d.ts.map +0 -1
  597. package/dist/agent/phases.js.map +0 -1
  598. package/dist/agent/pixels.d.ts.map +0 -1
  599. package/dist/agent/pixels.js.map +0 -1
  600. package/dist/agent/point-tap.d.ts.map +0 -1
  601. package/dist/agent/point-tap.js.map +0 -1
  602. package/dist/agent/primitives.d.ts.map +0 -1
  603. package/dist/agent/primitives.js.map +0 -1
  604. package/dist/agent/prompts.d.ts.map +0 -1
  605. package/dist/agent/prompts.js.map +0 -1
  606. package/dist/agent/protocol.d.ts.map +0 -1
  607. package/dist/agent/protocol.js.map +0 -1
  608. package/dist/agent/public.d.ts.map +0 -1
  609. package/dist/agent/public.js.map +0 -1
  610. package/dist/agent/reading.d.ts.map +0 -1
  611. package/dist/agent/reading.js.map +0 -1
  612. package/dist/agent/replay.d.ts.map +0 -1
  613. package/dist/agent/replay.js.map +0 -1
  614. package/dist/agent/screen-update.d.ts.map +0 -1
  615. package/dist/agent/screen-update.js.map +0 -1
  616. package/dist/agent/scroll-target.d.ts.map +0 -1
  617. package/dist/agent/scroll-target.js.map +0 -1
  618. package/dist/agent/secrets.d.ts.map +0 -1
  619. package/dist/agent/secrets.js.map +0 -1
  620. package/dist/agent/settle-policy.d.ts.map +0 -1
  621. package/dist/agent/settle-policy.js.map +0 -1
  622. package/dist/agent/step-accounting.d.ts.map +0 -1
  623. package/dist/agent/step-accounting.js.map +0 -1
  624. package/dist/agent/step-cache.d.ts.map +0 -1
  625. package/dist/agent/step-cache.js.map +0 -1
  626. package/dist/agent/tool-loop.d.ts.map +0 -1
  627. package/dist/agent/tool-loop.js.map +0 -1
  628. package/dist/agent/tool-output.d.ts.map +0 -1
  629. package/dist/agent/tool-output.js.map +0 -1
  630. package/dist/agent/tool.d.ts.map +0 -1
  631. package/dist/agent/tool.js.map +0 -1
  632. package/dist/agent/transcript-compaction.d.ts.map +0 -1
  633. package/dist/agent/transcript-compaction.js.map +0 -1
  634. package/dist/agent/upload-paths.d.ts.map +0 -1
  635. package/dist/agent/upload-paths.js.map +0 -1
  636. package/dist/agent/usage.d.ts.map +0 -1
  637. package/dist/agent/usage.js.map +0 -1
  638. package/dist/cache/anchors.d.ts.map +0 -1
  639. package/dist/cache/anchors.js.map +0 -1
  640. package/dist/cache/context.d.ts.map +0 -1
  641. package/dist/cache/context.js.map +0 -1
  642. package/dist/cache/decide.d.ts.map +0 -1
  643. package/dist/cache/decide.js.map +0 -1
  644. package/dist/cache/identity.d.ts.map +0 -1
  645. package/dist/cache/identity.js.map +0 -1
  646. package/dist/cache/recorder.d.ts.map +0 -1
  647. package/dist/cache/recorder.js.map +0 -1
  648. package/dist/cache/relocate.d.ts.map +0 -1
  649. package/dist/cache/relocate.js.map +0 -1
  650. package/dist/cache/route.d.ts.map +0 -1
  651. package/dist/cache/route.js.map +0 -1
  652. package/dist/cache/store.d.ts.map +0 -1
  653. package/dist/cache/store.js.map +0 -1
  654. package/dist/cache/template.d.ts.map +0 -1
  655. package/dist/cache/template.js.map +0 -1
  656. package/dist/cache/trace.d.ts.map +0 -1
  657. package/dist/cache/trace.js.map +0 -1
  658. package/dist/cli/bin.d.ts.map +0 -1
  659. package/dist/cli/bin.js.map +0 -1
  660. package/dist/cli/cache.d.ts.map +0 -1
  661. package/dist/cli/cache.js.map +0 -1
  662. package/dist/cli/docs-url.d.ts.map +0 -1
  663. package/dist/cli/docs-url.js.map +0 -1
  664. package/dist/cli/feedback.d.ts.map +0 -1
  665. package/dist/cli/feedback.js.map +0 -1
  666. package/dist/cli/guide.d.ts.map +0 -1
  667. package/dist/cli/guide.js.map +0 -1
  668. package/dist/cli/index.d.ts.map +0 -1
  669. package/dist/cli/index.js.map +0 -1
  670. package/dist/cli/init/agent-skill.d.ts.map +0 -1
  671. package/dist/cli/init/agent-skill.js.map +0 -1
  672. package/dist/cli/init/engines.d.ts.map +0 -1
  673. package/dist/cli/init/engines.js.map +0 -1
  674. package/dist/cli/init/gateways.d.ts.map +0 -1
  675. package/dist/cli/init/gateways.js.map +0 -1
  676. package/dist/cli/init/mcp-config.d.ts.map +0 -1
  677. package/dist/cli/init/mcp-config.js.map +0 -1
  678. package/dist/cli/init/package.d.ts.map +0 -1
  679. package/dist/cli/init/package.js.map +0 -1
  680. package/dist/cli/init/scaffold.d.ts.map +0 -1
  681. package/dist/cli/init/scaffold.js.map +0 -1
  682. package/dist/cli/init/versions.d.ts.map +0 -1
  683. package/dist/cli/init/versions.js.map +0 -1
  684. package/dist/cli/init.d.ts.map +0 -1
  685. package/dist/cli/init.js.map +0 -1
  686. package/dist/cli/mcp.d.ts.map +0 -1
  687. package/dist/cli/mcp.js.map +0 -1
  688. package/dist/cli/signals.d.ts.map +0 -1
  689. package/dist/cli/signals.js.map +0 -1
  690. package/dist/cli/skill.d.ts.map +0 -1
  691. package/dist/cli/skill.js.map +0 -1
  692. package/dist/cli/telemetry.d.ts.map +0 -1
  693. package/dist/cli/telemetry.js.map +0 -1
  694. package/dist/cli/wordmark.d.ts.map +0 -1
  695. package/dist/cli/wordmark.js.map +0 -1
  696. package/dist/collect/collect.d.ts.map +0 -1
  697. package/dist/collect/collect.js.map +0 -1
  698. package/dist/collect/registry.d.ts.map +0 -1
  699. package/dist/collect/registry.js.map +0 -1
  700. package/dist/collect/select.d.ts.map +0 -1
  701. package/dist/collect/select.js.map +0 -1
  702. package/dist/config/agent.d.ts.map +0 -1
  703. package/dist/config/agent.js.map +0 -1
  704. package/dist/config/app.d.ts.map +0 -1
  705. package/dist/config/app.js.map +0 -1
  706. package/dist/config/command.d.ts.map +0 -1
  707. package/dist/config/command.js.map +0 -1
  708. package/dist/config/diagnose.d.ts.map +0 -1
  709. package/dist/config/diagnose.js.map +0 -1
  710. package/dist/config/esm-hooks.d.ts.map +0 -1
  711. package/dist/config/esm-hooks.js.map +0 -1
  712. package/dist/config/load.d.ts.map +0 -1
  713. package/dist/config/load.js.map +0 -1
  714. package/dist/config/resolve.d.ts.map +0 -1
  715. package/dist/config/resolve.js.map +0 -1
  716. package/dist/config/secrets.d.ts.map +0 -1
  717. package/dist/config/secrets.js.map +0 -1
  718. package/dist/config/targets.d.ts.map +0 -1
  719. package/dist/config/targets.js.map +0 -1
  720. package/dist/config/validate.d.ts.map +0 -1
  721. package/dist/config/validate.js.map +0 -1
  722. package/dist/engine/contract.d.ts.map +0 -1
  723. package/dist/engine/contract.js.map +0 -1
  724. package/dist/engine/index.d.ts.map +0 -1
  725. package/dist/engine/index.js.map +0 -1
  726. package/dist/engine/manifest.d.ts.map +0 -1
  727. package/dist/engine/manifest.js.map +0 -1
  728. package/dist/engine/recording.d.ts.map +0 -1
  729. package/dist/engine/recording.js.map +0 -1
  730. package/dist/engine/resolve.d.ts.map +0 -1
  731. package/dist/engine/resolve.js.map +0 -1
  732. package/dist/engine/session.d.ts.map +0 -1
  733. package/dist/engine/session.js.map +0 -1
  734. package/dist/engine/surface.d.ts.map +0 -1
  735. package/dist/engine/surface.js.map +0 -1
  736. package/dist/engine/timing.d.ts.map +0 -1
  737. package/dist/engine/timing.js.map +0 -1
  738. package/dist/expect/async.d.ts.map +0 -1
  739. package/dist/expect/async.js.map +0 -1
  740. package/dist/expect/attempt.d.ts.map +0 -1
  741. package/dist/expect/attempt.js.map +0 -1
  742. package/dist/expect/index.d.ts.map +0 -1
  743. package/dist/expect/index.js.map +0 -1
  744. package/dist/expect/poll.d.ts.map +0 -1
  745. package/dist/expect/poll.js.map +0 -1
  746. package/dist/expect/soft.d.ts.map +0 -1
  747. package/dist/expect/soft.js.map +0 -1
  748. package/dist/expect/values.d.ts.map +0 -1
  749. package/dist/expect/values.js.map +0 -1
  750. package/dist/explore/body.d.ts.map +0 -1
  751. package/dist/explore/body.js.map +0 -1
  752. package/dist/explore/executor.d.ts.map +0 -1
  753. package/dist/explore/executor.js.map +0 -1
  754. package/dist/explore/index.d.ts.map +0 -1
  755. package/dist/explore/index.js.map +0 -1
  756. package/dist/explore/plan.d.ts.map +0 -1
  757. package/dist/explore/plan.js.map +0 -1
  758. package/dist/explore/progress.d.ts.map +0 -1
  759. package/dist/explore/progress.js.map +0 -1
  760. package/dist/explore/state.d.ts.map +0 -1
  761. package/dist/explore/state.js.map +0 -1
  762. package/dist/index.d.ts.map +0 -1
  763. package/dist/index.js.map +0 -1
  764. package/dist/internal/ai-trace.d.ts.map +0 -1
  765. package/dist/internal/ai-trace.js.map +0 -1
  766. package/dist/internal/atomic-write.d.ts.map +0 -1
  767. package/dist/internal/atomic-write.js.map +0 -1
  768. package/dist/internal/brands.d.ts.map +0 -1
  769. package/dist/internal/brands.js.map +0 -1
  770. package/dist/internal/debug.d.ts.map +0 -1
  771. package/dist/internal/debug.js.map +0 -1
  772. package/dist/internal/env.d.ts.map +0 -1
  773. package/dist/internal/env.js.map +0 -1
  774. package/dist/internal/errors.d.ts.map +0 -1
  775. package/dist/internal/errors.js.map +0 -1
  776. package/dist/internal/geometry.d.ts.map +0 -1
  777. package/dist/internal/geometry.js.map +0 -1
  778. package/dist/internal/git.d.ts.map +0 -1
  779. package/dist/internal/git.js.map +0 -1
  780. package/dist/internal/globs.d.ts.map +0 -1
  781. package/dist/internal/globs.js.map +0 -1
  782. package/dist/internal/ids.d.ts.map +0 -1
  783. package/dist/internal/ids.js.map +0 -1
  784. package/dist/internal/json-value.d.ts.map +0 -1
  785. package/dist/internal/json-value.js.map +0 -1
  786. package/dist/internal/keys.d.ts.map +0 -1
  787. package/dist/internal/keys.js.map +0 -1
  788. package/dist/internal/node-version.d.ts.map +0 -1
  789. package/dist/internal/node-version.js.map +0 -1
  790. package/dist/internal/objects.d.ts.map +0 -1
  791. package/dist/internal/objects.js.map +0 -1
  792. package/dist/internal/options.d.ts.map +0 -1
  793. package/dist/internal/options.js.map +0 -1
  794. package/dist/internal/package-manager.d.ts.map +0 -1
  795. package/dist/internal/package-manager.js.map +0 -1
  796. package/dist/internal/package-version.d.ts.map +0 -1
  797. package/dist/internal/package-version.js.map +0 -1
  798. package/dist/internal/paths.d.ts.map +0 -1
  799. package/dist/internal/paths.js.map +0 -1
  800. package/dist/internal/realm-slot.d.ts.map +0 -1
  801. package/dist/internal/realm-slot.js.map +0 -1
  802. package/dist/internal/recording-modes.d.ts.map +0 -1
  803. package/dist/internal/recording-modes.js.map +0 -1
  804. package/dist/internal/redact.d.ts.map +0 -1
  805. package/dist/internal/redact.js.map +0 -1
  806. package/dist/internal/regexp.d.ts.map +0 -1
  807. package/dist/internal/regexp.js.map +0 -1
  808. package/dist/internal/roles.d.ts.map +0 -1
  809. package/dist/internal/roles.js.map +0 -1
  810. package/dist/internal/skip.d.ts.map +0 -1
  811. package/dist/internal/skip.js.map +0 -1
  812. package/dist/internal/source.d.ts.map +0 -1
  813. package/dist/internal/source.js.map +0 -1
  814. package/dist/internal/standard-schema.d.ts.map +0 -1
  815. package/dist/internal/standard-schema.js.map +0 -1
  816. package/dist/internal/suggest.d.ts.map +0 -1
  817. package/dist/internal/suggest.js.map +0 -1
  818. package/dist/internal/text.d.ts.map +0 -1
  819. package/dist/internal/text.js.map +0 -1
  820. package/dist/internal/time.d.ts.map +0 -1
  821. package/dist/internal/time.js.map +0 -1
  822. package/dist/internal/urls.d.ts.map +0 -1
  823. package/dist/internal/urls.js.map +0 -1
  824. package/dist/internal/vcs.d.ts.map +0 -1
  825. package/dist/internal/vcs.js.map +0 -1
  826. package/dist/internal/zip.d.ts.map +0 -1
  827. package/dist/internal/zip.js.map +0 -1
  828. package/dist/locator/engine.d.ts.map +0 -1
  829. package/dist/locator/engine.js.map +0 -1
  830. package/dist/locator/expression.d.ts.map +0 -1
  831. package/dist/locator/expression.js.map +0 -1
  832. package/dist/locator/screen.d.ts.map +0 -1
  833. package/dist/locator/screen.js.map +0 -1
  834. package/dist/mcp/catalog.d.ts.map +0 -1
  835. package/dist/mcp/catalog.js.map +0 -1
  836. package/dist/mcp/config.d.ts.map +0 -1
  837. package/dist/mcp/config.js.map +0 -1
  838. package/dist/mcp/recording.d.ts.map +0 -1
  839. package/dist/mcp/recording.js.map +0 -1
  840. package/dist/mcp/server.d.ts.map +0 -1
  841. package/dist/mcp/server.js.map +0 -1
  842. package/dist/mcp/session.d.ts.map +0 -1
  843. package/dist/mcp/session.js.map +0 -1
  844. package/dist/mcp/sessions.d.ts.map +0 -1
  845. package/dist/mcp/sessions.js.map +0 -1
  846. package/dist/mcp/tools.d.ts.map +0 -1
  847. package/dist/mcp/tools.js.map +0 -1
  848. package/dist/oauth/callback-server.d.ts.map +0 -1
  849. package/dist/oauth/callback-server.js.map +0 -1
  850. package/dist/oauth/chatgpt.d.ts.map +0 -1
  851. package/dist/oauth/chatgpt.js.map +0 -1
  852. package/dist/oauth/cli.d.ts.map +0 -1
  853. package/dist/oauth/cli.js.map +0 -1
  854. package/dist/oauth/copilot.d.ts.map +0 -1
  855. package/dist/oauth/copilot.js.map +0 -1
  856. package/dist/oauth/device-code.d.ts.map +0 -1
  857. package/dist/oauth/device-code.js.map +0 -1
  858. package/dist/oauth/errors.d.ts.map +0 -1
  859. package/dist/oauth/errors.js.map +0 -1
  860. package/dist/oauth/fetch.d.ts.map +0 -1
  861. package/dist/oauth/fetch.js.map +0 -1
  862. package/dist/oauth/grok.d.ts.map +0 -1
  863. package/dist/oauth/grok.js.map +0 -1
  864. package/dist/oauth/jwt.d.ts.map +0 -1
  865. package/dist/oauth/jwt.js.map +0 -1
  866. package/dist/oauth/login.d.ts.map +0 -1
  867. package/dist/oauth/login.js.map +0 -1
  868. package/dist/oauth/models.d.ts.map +0 -1
  869. package/dist/oauth/models.js.map +0 -1
  870. package/dist/oauth/pkce.d.ts.map +0 -1
  871. package/dist/oauth/pkce.js.map +0 -1
  872. package/dist/oauth/providers/github-copilot.d.ts.map +0 -1
  873. package/dist/oauth/providers/github-copilot.js.map +0 -1
  874. package/dist/oauth/providers/openai.d.ts.map +0 -1
  875. package/dist/oauth/providers/openai.js.map +0 -1
  876. package/dist/oauth/providers/xai.d.ts.map +0 -1
  877. package/dist/oauth/providers/xai.js.map +0 -1
  878. package/dist/oauth/providers.d.ts.map +0 -1
  879. package/dist/oauth/providers.js.map +0 -1
  880. package/dist/oauth/sse.d.ts.map +0 -1
  881. package/dist/oauth/sse.js.map +0 -1
  882. package/dist/oauth/store.d.ts.map +0 -1
  883. package/dist/oauth/store.js.map +0 -1
  884. package/dist/oauth/token-endpoint.d.ts.map +0 -1
  885. package/dist/oauth/token-endpoint.js.map +0 -1
  886. package/dist/oauth/types.d.ts.map +0 -1
  887. package/dist/oauth/types.js.map +0 -1
  888. package/dist/params.d.ts.map +0 -1
  889. package/dist/params.js.map +0 -1
  890. package/dist/report/build.d.ts.map +0 -1
  891. package/dist/report/build.js.map +0 -1
  892. package/dist/report/builtin.d.ts.map +0 -1
  893. package/dist/report/builtin.js.map +0 -1
  894. package/dist/report/code-frame.d.ts.map +0 -1
  895. package/dist/report/code-frame.js.map +0 -1
  896. package/dist/report/debug-steps.d.ts.map +0 -1
  897. package/dist/report/debug-steps.js.map +0 -1
  898. package/dist/report/explore-text.d.ts.map +0 -1
  899. package/dist/report/explore-text.js.map +0 -1
  900. package/dist/report/failure-text.d.ts.map +0 -1
  901. package/dist/report/failure-text.js.map +0 -1
  902. package/dist/report/format.d.ts.map +0 -1
  903. package/dist/report/format.js.map +0 -1
  904. package/dist/report/json.d.ts.map +0 -1
  905. package/dist/report/json.js.map +0 -1
  906. package/dist/report/junit.d.ts.map +0 -1
  907. package/dist/report/junit.js.map +0 -1
  908. package/dist/report/list-explore.d.ts.map +0 -1
  909. package/dist/report/list-explore.js.map +0 -1
  910. package/dist/report/list-model.d.ts.map +0 -1
  911. package/dist/report/list-model.js.map +0 -1
  912. package/dist/report/list-steps.d.ts.map +0 -1
  913. package/dist/report/list-steps.js.map +0 -1
  914. package/dist/report/list.d.ts.map +0 -1
  915. package/dist/report/list.js.map +0 -1
  916. package/dist/report/live-window.d.ts.map +0 -1
  917. package/dist/report/live-window.js.map +0 -1
  918. package/dist/report/markdown-text.d.ts.map +0 -1
  919. package/dist/report/markdown-text.js.map +0 -1
  920. package/dist/report/markdown.d.ts.map +0 -1
  921. package/dist/report/markdown.js.map +0 -1
  922. package/dist/report/outcome.d.ts.map +0 -1
  923. package/dist/report/outcome.js.map +0 -1
  924. package/dist/report/repeats.d.ts.map +0 -1
  925. package/dist/report/repeats.js.map +0 -1
  926. package/dist/report/running-tree.d.ts.map +0 -1
  927. package/dist/report/running-tree.js.map +0 -1
  928. package/dist/report/write.d.ts.map +0 -1
  929. package/dist/report/write.js.map +0 -1
  930. package/dist/run/app-ports.d.ts.map +0 -1
  931. package/dist/run/app-ports.js.map +0 -1
  932. package/dist/run/artifacts.d.ts.map +0 -1
  933. package/dist/run/artifacts.js.map +0 -1
  934. package/dist/run/budget.d.ts.map +0 -1
  935. package/dist/run/budget.js.map +0 -1
  936. package/dist/run/declared-processes.d.ts.map +0 -1
  937. package/dist/run/declared-processes.js.map +0 -1
  938. package/dist/run/events.d.ts.map +0 -1
  939. package/dist/run/events.js.map +0 -1
  940. package/dist/run/execute.d.ts.map +0 -1
  941. package/dist/run/execute.js.map +0 -1
  942. package/dist/run/extended-fixtures.d.ts.map +0 -1
  943. package/dist/run/extended-fixtures.js.map +0 -1
  944. package/dist/run/failure-evidence.d.ts.map +0 -1
  945. package/dist/run/failure-evidence.js.map +0 -1
  946. package/dist/run/fixture-recording.d.ts.map +0 -1
  947. package/dist/run/fixture-recording.js.map +0 -1
  948. package/dist/run/fixtures.d.ts.map +0 -1
  949. package/dist/run/fixtures.js.map +0 -1
  950. package/dist/run/in-process.d.ts.map +0 -1
  951. package/dist/run/in-process.js.map +0 -1
  952. package/dist/run/last-run.d.ts.map +0 -1
  953. package/dist/run/last-run.js.map +0 -1
  954. package/dist/run/managed-process.d.ts.map +0 -1
  955. package/dist/run/managed-process.js.map +0 -1
  956. package/dist/run/output.d.ts.map +0 -1
  957. package/dist/run/output.js.map +0 -1
  958. package/dist/run/process-pool.d.ts.map +0 -1
  959. package/dist/run/process-pool.js.map +0 -1
  960. package/dist/run/provision.d.ts.map +0 -1
  961. package/dist/run/provision.js.map +0 -1
  962. package/dist/run/realm.d.ts.map +0 -1
  963. package/dist/run/realm.js.map +0 -1
  964. package/dist/run/records.d.ts.map +0 -1
  965. package/dist/run/records.js.map +0 -1
  966. package/dist/run/retry.d.ts.map +0 -1
  967. package/dist/run/retry.js.map +0 -1
  968. package/dist/run/runner.d.ts.map +0 -1
  969. package/dist/run/runner.js.map +0 -1
  970. package/dist/run/scheduler.d.ts.map +0 -1
  971. package/dist/run/scheduler.js.map +0 -1
  972. package/dist/run/secrecy.d.ts.map +0 -1
  973. package/dist/run/secrecy.js.map +0 -1
  974. package/dist/run/serial.d.ts.map +0 -1
  975. package/dist/run/serial.js.map +0 -1
  976. package/dist/run/sessions.d.ts.map +0 -1
  977. package/dist/run/sessions.js.map +0 -1
  978. package/dist/run/standalone.d.ts.map +0 -1
  979. package/dist/run/standalone.js.map +0 -1
  980. package/dist/run/steps.d.ts.map +0 -1
  981. package/dist/run/steps.js.map +0 -1
  982. package/dist/run/trace-redaction.d.ts.map +0 -1
  983. package/dist/run/trace-redaction.js.map +0 -1
  984. package/dist/run/unit-runner.d.ts.map +0 -1
  985. package/dist/run/unit-runner.js.map +0 -1
  986. package/dist/run/units.d.ts.map +0 -1
  987. package/dist/run/units.js.map +0 -1
  988. package/dist/run/worker/entry.d.ts.map +0 -1
  989. package/dist/run/worker/entry.js.map +0 -1
  990. package/dist/run/worker/handle.d.ts.map +0 -1
  991. package/dist/run/worker/handle.js.map +0 -1
  992. package/dist/run/worker/protocol.d.ts.map +0 -1
  993. package/dist/run/worker/protocol.js.map +0 -1
  994. package/dist/run/worker/session.d.ts.map +0 -1
  995. package/dist/run/worker/session.js.map +0 -1
  996. package/dist/run/worker-models.d.ts.map +0 -1
  997. package/dist/run/worker-models.js.map +0 -1
  998. package/dist/secrets.d.ts.map +0 -1
  999. package/dist/secrets.js.map +0 -1
  1000. package/dist/telemetry/checkout.d.ts.map +0 -1
  1001. package/dist/telemetry/checkout.js.map +0 -1
  1002. package/dist/telemetry/environment.d.ts.map +0 -1
  1003. package/dist/telemetry/environment.js.map +0 -1
  1004. package/dist/telemetry/events.d.ts.map +0 -1
  1005. package/dist/telemetry/events.js.map +0 -1
  1006. package/dist/telemetry/failure-kind.d.ts.map +0 -1
  1007. package/dist/telemetry/failure-kind.js.map +0 -1
  1008. package/dist/telemetry/posthog.d.ts.map +0 -1
  1009. package/dist/telemetry/posthog.js.map +0 -1
  1010. package/dist/telemetry/project.d.ts.map +0 -1
  1011. package/dist/telemetry/project.js.map +0 -1
  1012. package/dist/telemetry/store.d.ts.map +0 -1
  1013. package/dist/telemetry/store.js.map +0 -1
  1014. package/dist/telemetry/telemetry.d.ts.map +0 -1
  1015. package/dist/telemetry/telemetry.js.map +0 -1
  1016. package/dist/telemetry/token.d.ts.map +0 -1
  1017. package/dist/telemetry/token.js.map +0 -1
  1018. package/dist/types.d.ts.map +0 -1
  1019. package/dist/types.js.map +0 -1
package/docs/cache.mdx ADDED
@@ -0,0 +1,306 @@
1
+ ---
2
+ title: Caching agent steps
3
+ description: Replay verified agent actions without model calls, and let the agent take over when the app changes.
4
+ ---
5
+
6
+ The replay cache records the actions in an `agent.act()` step after a later
7
+ check verifies the result. On the next run, the runner replays those actions
8
+ without calling the model. If a control or the expected end state no longer
9
+ matches, the agent takes over from the current screen.
10
+
11
+ `agent.assert`, `agent.waitFor`, and `agent.extract` always run live.
12
+
13
+ The run summary reports the outcomes:
14
+
15
+ ```text
16
+ AI 4.1k tokens · 2 model calls · anthropic/claude-sonnet-4.5
17
+ Cache 4 replayed · 1 handed off · 1 missed
18
+ ```
19
+
20
+ | Run summary | `step.cache.mode` | Meaning |
21
+ | --- | --- | --- |
22
+ | `replayed` | `self-finalized` | The recording completed without a model call. |
23
+ | `handed off` | `agent-concluded` | Replay started, then the agent took over. |
24
+ | `missed` | `missed` | The agent ran the step from the beginning. |
25
+
26
+ Misses and hand-offs also include `step.cache.reason`. `agent.act()` returns
27
+ the same cache object as `result.cache`. The cache object is absent when
28
+ caching is off for the step.
29
+
30
+ To rule the cache out of a failure, run once without it:
31
+
32
+ <CodeGroup>
33
+ ```bash npm
34
+ npx e2e run --no-cache
35
+ ```
36
+
37
+ ```bash pnpm
38
+ pnpm exec e2e run --no-cache
39
+ ```
40
+
41
+ ```bash bun
42
+ bunx e2e run --no-cache
43
+ ```
44
+ </CodeGroup>
45
+
46
+ ## How a replay works
47
+
48
+ 1. Check the starting screen: the same route, whatever the record id, the
49
+ query, or the fragment. Retries always run live.
50
+ 2. Find each recorded control and repeat its action. The runner matches
51
+ controls by their role, name, test id, and surrounding context. It waits
52
+ for missing controls and stops if a match is ambiguous. A control with no
53
+ name is found by its place among the unnamed controls of its kind.
54
+ 3. Check the final path and controls that appeared during the original step.
55
+ Text that changes with the data, a count, a date, an id, is not used.
56
+ 4. Finish without a model call, or let the agent continue with a record of
57
+ what ran and why replay stopped.
58
+
59
+ Typed values replay as recorded, even when an earlier run left the same
60
+ value on screen. Secret fills resolve the current value by name and run
61
+ through authorization again.
62
+
63
+ ## What must match
64
+
65
+ A cache entry belongs to a specific test, target, instruction, and set of
66
+ params. Renaming the test or target, changing the instruction or an ordinary
67
+ param, or upgrading the engine's major or minor version causes a miss.
68
+ Changing the model does not.
69
+
70
+ A timestamp or a fresh email address would cause a miss on every run. Wrap
71
+ values like these in `unique()` so the runner substitutes the current value
72
+ when replaying:
73
+
74
+ ```ts
75
+ import { unique } from 'e2e';
76
+
77
+ const name = `E2E ${Date.now()} Company`;
78
+ await agent.act('create a company named {name}', { params: { name: unique(name) } });
79
+ await expect(screen.getByRole('heading', { name })).toBeVisible();
80
+ ```
81
+
82
+ Use `unique()` for data the flow enters or checks. Keep choices that change
83
+ the flow, such as a plan name, as ordinary params. The substitution covers
84
+ the value as a URL spells it too, `%20` in a path or `+` in a search query.
85
+
86
+ When a `unique()` value equals another param's value or appears inside one,
87
+ the step passes but is not recorded, and `step.cache.notRecorded` reads
88
+ `param-collision`. The next run, with a fresh value, records it.
89
+
90
+ For preview URLs that change on each deploy, set
91
+ [`app.identity`](/reference/config#the-app-under-test) to keep the same cache
92
+ identity. On devices, replay uses the
93
+ [screen title](/reference/mobile#replay-cache-on-a-device) as the path.
94
+
95
+ ## When a recording is written
96
+
97
+ In `read-write` mode, the runner saves a recording at the end of the
98
+ attempt when a later verification step passed. A step that took no action
99
+ records nothing.
100
+
101
+ | Counts as verification | Does not count |
102
+ | --- | --- |
103
+ | `expect(locator).toHaveText(...)` and other locator matchers | `expect(value).toBe(...)` on a plain value |
104
+ | `expect(browser).toHaveURL(...)` and other engine assertions | `expect.poll(...)` |
105
+ | `locator.waitFor()`, `browser.waitForURL()` | `locator.textContent()` and other reads |
106
+ | `agent.assert(...)`, `agent.waitFor(...)` | `agent.extract(...)`, another `act`, the attempt passing |
107
+
108
+ Follow each `act` with a check of its outcome:
109
+
110
+ ```ts title="tests/cart.e2e.ts"
111
+ import { expect, test } from 'e2e';
112
+
113
+ test('adds an item', async ({ app, agent, screen }) => {
114
+ await app.open('/cart');
115
+ await agent.act('add one item to the cart');
116
+ await expect(screen.getByRole('status')).toHaveText('1 item');
117
+ });
118
+ ```
119
+
120
+ A failing attempt can still save steps verified before the failure. It
121
+ deletes unverified entries and replays implicated in the failure, including
122
+ an `end-mismatch`. Custom stores need a `delete` method for this cleanup.
123
+
124
+ Cancelling a run leaves the cache unchanged. An attempt whose only failures
125
+ are ones where no model answered leaves every entry it did not confirm
126
+ unchanged: `MODEL_UNAVAILABLE`
127
+ (no model configured) and `MODEL_PROVIDER_FAILED` (the provider returned an
128
+ error such as a missing or rejected key, a rate limit, or a 5xx, or a request
129
+ got no response within 120 seconds). Those say nothing about the app, so a
130
+ read-write run without model access keeps its recordings, including one a
131
+ step replayed before an `agent.assert` that could not reach its model, and
132
+ still saves steps verified before the failure. A model that answered with
133
+ something unusable (`MODEL_OUTPUT_INVALID`, `CONTEXT_OVERFLOW`) or a step that
134
+ ran out of time (`STEP_TIMEOUT`, even while a request was still open) counts
135
+ as a failure of the flow, and so does any other failure in the same attempt,
136
+ such as an `afterEach` assertion.
137
+
138
+ ## Why a step was not replayed
139
+
140
+ `step.cache.reason` in the report says why:
141
+
142
+ | Reason | What happened | What to do |
143
+ | --- | --- | --- |
144
+ | `no-entry` | No recording matches this step and its params. | The next verified pass records it. |
145
+ | `retry` | Retries never replay. | Nothing. |
146
+ | `invalid-entry` | The file is unreadable, over 1 MiB, or from another schema version. | `npx e2e cache clear`. |
147
+ | `truncated` | The recording hit a limit, see [below](#limits-and-gaps). | Split the step, or pass the secret as a `Secret`. |
148
+ | `wrong-context` | The app was on another screen than when the step was recorded: a different route, not a different record, query, or fragment. | Open the same screen before the step. |
149
+ | `target-not-found` | A recorded control did not appear within 15 seconds. | The UI changed. The next passing run re-records. |
150
+ | `target-ambiguous` | The number of matching controls changed. | Give repeated controls distinct names or use unique test data. |
151
+ | `gap` | An action cannot be replayed, see [below](#limits-and-gaps). | The agent continues this part live. Put stable values in `params`. |
152
+ | `action-failed` | The app rejected a replayed action. | Check the app. |
153
+ | `action-uncertain` | A replayed action failed with an unknown commit state. The agent is told to check before acting again. | Check the app. |
154
+ | `viewport-changed` | A bare-point tap or hover was recorded on a viewport of another size. | Keep the viewport fixed. |
155
+ | `end-mismatch` | Every action ran, but the recorded path or a control that should have appeared did not come back. | Leftover data from an earlier run, a banner that comes and goes, or a regression. |
156
+
157
+ A stop before any action ran is a miss. After replay starts, it is a
158
+ hand-off. Unique test data and cleanup in `afterEach` help avoid stale
159
+ state between runs.
160
+
161
+ ### Limits and gaps
162
+
163
+ A recording is `truncated` when the step took more than 50 actions (only
164
+ possible with `maxSteps` raised above 50), typed a value or URL over 4,096
165
+ characters or one holding a registered secret, or acted on a control with no
166
+ usable description.
167
+
168
+ A `gap` is an action the cache cannot repeat: a mutating
169
+ [project tool](/tools), or a value the agent read off the screen, typed after
170
+ seeing a screenshot, or worked out from the date. `step.cache.derived` names
171
+ the rule: `whole-node` (a control's whole name or text), `minted-token` (a
172
+ code or id the app showed as its own word), `date`, or `pixels`. Values from
173
+ the instruction or `params`, or ones the agent composed itself, replay.
174
+
175
+ ## What a recording holds
176
+
177
+ Each entry is a JSON file under `.e2e/cache/`, named by a hash of its key.
178
+ It contains actions, target descriptions, typed text, a step summary, and
179
+ checks for the final state. Those checks include the path and up to eight
180
+ controls that appeared during the step.
181
+
182
+ Entries contain no prompts, conversations, screenshots, observed trees, or
183
+ secret values. A secret fill stores only the secret's name. Other typed
184
+ values are stored verbatim, so review recordings before sharing them; see
185
+ [cache trust](/security#cache-trust).
186
+
187
+ ## Modes
188
+
189
+ | Mode | Replays | Records | Default |
190
+ | --- | --- | --- | --- |
191
+ | `'read-write'` | yes | yes | locally |
192
+ | `'read-only'` | yes | no | in CI when `cache` is unset |
193
+ | `'off'` | no | no | `--no-cache` for one run |
194
+
195
+ ```ts title="e2e.config.ts fragment"
196
+ cache: 'off',
197
+ // or
198
+ cache: { mode: 'read-write', dir: '.e2e/cache' },
199
+ ```
200
+
201
+ `--no-cache` overrides the config. To let CI update recordings, explicitly
202
+ set `cache: 'read-write'`. In `read-only` mode, stale entries remain until
203
+ a read-write run replaces them.
204
+
205
+ A custom `cache.store` replaces the file store and does not default to
206
+ read-only in CI. `e2e explore` and `e2e mcp` do not use the cache. See the
207
+ [config reference](/reference/config#cache).
208
+
209
+ ## Commit the replay cache
210
+
211
+ <span id="commit-your-traces" />
212
+
213
+ `e2e init` adds `.e2e/cache/` to `.gitignore`, so every machine records its
214
+ own and CI starts with none. To share replays, remove that line and commit
215
+ the directory. CI stays `read-only` unless you set `cache: 'read-write'`.
216
+ Treat committed entries as test data and review them in the pull request
217
+ that re-recorded them.
218
+
219
+ Local runs leave a committed directory clean unless something changed. A
220
+ replayed step never rewrites its entry, and a live re-recording with the same
221
+ actions, paths, and anchors is not written: the summary, the measured end
222
+ wait, and the rule that flagged a typed run-time value differ between two
223
+ live runs of the same flow and do not count. A file changes when:
224
+
225
+ - a step records for the first time,
226
+ - the agent finishes a step after a hand-off, re-recording what it saw,
227
+ - a step fails after replaying, or ends in an `end-mismatch` the agent had
228
+ to repair, which deletes the entry,
229
+ - no verification step confirmed the entry by the end of the attempt, which
230
+ deletes it.
231
+
232
+ A replay that still finds every control refreshes nothing, so an entry for a
233
+ drifting UI is repaired only once a control can no longer be found.
234
+
235
+ ## Fail on a stale recording
236
+
237
+ A committed recording that stops replaying is quiet by default: the agent
238
+ takes the step over, the test passes, and every CI run pays for the model
239
+ calls until someone re-records. `--strict-cache` (or `cache: { strict: true }`)
240
+ makes it loud. A step whose recording exists but no longer replays fails
241
+ with `REPLAY_STALE` and makes no model call:
242
+
243
+ <CodeGroup>
244
+ ```bash npm
245
+ CI=1 npx e2e run --strict-cache
246
+ ```
247
+
248
+ ```bash pnpm
249
+ CI=1 pnpm exec e2e run --strict-cache
250
+ ```
251
+
252
+ ```bash bun
253
+ CI=1 bunx e2e run --strict-cache
254
+ ```
255
+ </CodeGroup>
256
+
257
+ The reasons that fail are the ones that mean the app or the entry changed:
258
+ `invalid-entry`, `wrong-context`, `target-not-found`, `target-ambiguous`,
259
+ `viewport-changed`, `action-failed`, `action-uncertain`, and `end-mismatch`.
260
+ A step with no recording (`no-entry`), a retry, a `gap`, and a `truncated`
261
+ recording still run live. `REPLAY_STALE` exits 2 and is not retried, since a
262
+ retry never replays and would pass live. The entry stays where it is, even
263
+ in `read-write` mode, so every strict run fails on it until it is re-recorded:
264
+ run the test in `read-write` mode without the flag, and with `cache.strict`
265
+ off when the config set it, then commit the changed entry; a custom
266
+ `cache.store` receives the new entry from that run instead. The message
267
+ names the knob that turned strict on and where the entry lives: the cache
268
+ directory, or the configured `cache.store`. A store whose read fails is not
269
+ a stale recording; the step runs live.
270
+
271
+ ## Inspect the cache
272
+
273
+ <CodeGroup>
274
+ ```bash npm
275
+ npx e2e cache ls # one row per entry: test, target, instruction digest, age, actions
276
+ npx e2e cache stats # entry count and size
277
+ npx e2e cache clear # delete every entry
278
+ ```
279
+
280
+ ```bash pnpm
281
+ pnpm exec e2e cache ls # one row per entry: test, target, instruction digest, age, actions
282
+ pnpm exec e2e cache stats # entry count and size
283
+ pnpm exec e2e cache clear # delete every entry
284
+ ```
285
+
286
+ ```bash bun
287
+ bunx e2e cache ls # one row per entry: test, target, instruction digest, age, actions
288
+ bunx e2e cache stats # entry count and size
289
+ bunx e2e cache clear # delete every entry
290
+ ```
291
+ </CodeGroup>
292
+
293
+ <Note>
294
+ The `cached` percentage in AI usage is the provider's prompt cache. It
295
+ reduces the cost of a model call. The replay cache described here skips the
296
+ call entirely.
297
+ </Note>
298
+
299
+ <CardGroup cols={2}>
300
+ <Card title="Config reference" icon="sliders" href="/reference/config#cache">
301
+ `mode`, `store`, `dir`.
302
+ </Card>
303
+ <Card title="CLI reference" icon="terminal" href="/reference/cli#e2e-cache">
304
+ `e2e cache ls`, `stats`, `clear`.
305
+ </Card>
306
+ </CardGroup>
package/docs/ci.mdx ADDED
@@ -0,0 +1,210 @@
1
+ ---
2
+ title: Continuous integration
3
+ description: Run tests on pull requests, upload reports, and configure model credentials in CI.
4
+ ---
5
+
6
+ Run deterministic and agent tests in the same CI job. This workflow assumes
7
+ your config includes a [command](/starting-your-app) to start the app and
8
+ uses AI Gateway for model calls:
9
+
10
+ ```yaml title=".github/workflows/e2e.yml"
11
+ name: e2e
12
+
13
+ on:
14
+ pull_request:
15
+ push:
16
+ branches: [main]
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ concurrency:
22
+ group: ${{ github.workflow }}-${{ github.ref }}
23
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
24
+
25
+ jobs:
26
+ e2e:
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
30
+ - uses: pnpm/action-setup@9fd676a19091d4595eefd76e4bd31c97133911f1 # v4.2.0
31
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
32
+ with:
33
+ node-version: 26
34
+ cache: pnpm
35
+ - run: pnpm install --frozen-lockfile
36
+
37
+ - name: Install browsers
38
+ run: npx playwright install chromium --with-deps
39
+
40
+ - name: Run e2e
41
+ run: npx e2e run --reporter list,junit
42
+ env:
43
+ APP_URL: http://127.0.0.1:3000
44
+ AI_GATEWAY_API_KEY: ${{ secrets.AI_GATEWAY_API_KEY }}
45
+ E2E_USER_ADMIN_USERNAME: ${{ secrets.E2E_USER_ADMIN_USERNAME }}
46
+ E2E_USER_ADMIN_PASSWORD: ${{ secrets.E2E_USER_ADMIN_PASSWORD }}
47
+
48
+ - name: Upload report
49
+ if: ${{ !cancelled() }}
50
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
51
+ with:
52
+ name: e2e-report
53
+ path: |
54
+ .e2e/report.json
55
+ .e2e/junit.xml
56
+ if-no-files-found: warn
57
+
58
+ - name: Upload artifacts
59
+ if: ${{ !cancelled() }}
60
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
61
+ with:
62
+ name: e2e-artifacts
63
+ path: .e2e/artifacts
64
+ if-no-files-found: warn
65
+ retention-days: 7
66
+ ```
67
+
68
+ The workflow pins actions to commit SHAs and installs dependencies from the
69
+ lockfile. `npx e2e` runs the installed version.
70
+
71
+ Artifacts upload on every run that is not cancelled, so a test that failed
72
+ and then passed on retry still has its evidence.
73
+
74
+ For iOS and Android suites, see [Mobile CI](/mobile-ci): GitHub Actions, EAS
75
+ Workflows, Bitrise, and Codemagic.
76
+
77
+ Configure your CI's test-report integration to read `.e2e/junit.xml`. It
78
+ includes startup failures such as `APP_UNREACHABLE` in a `run` suite. Add
79
+ the [GitHub reporter](/github) to post results on the pull request. Make the
80
+ e2e job a required check in your repository settings if it should block merges.
81
+
82
+ ## What CI changes
83
+
84
+ CI mode is on when `CI` is set to a value other than an empty string, `0`,
85
+ or `false`. Use `CI=1 npx e2e run` to reproduce these defaults locally:
86
+
87
+ | Setting | Local | CI |
88
+ | --- | --- | --- |
89
+ | `retries` | `0` | `1` |
90
+ | `workers` | half your cores | `1` |
91
+ | `cache` when unset | `read-write` | `read-only` |
92
+ | `.only` | allowed | rejected with `ONLY_IN_CI` |
93
+ | `command.reuseExisting` | honored | ignored, with a notice |
94
+
95
+ Override worker and retry defaults with flags:
96
+
97
+ <CodeGroup>
98
+ ```bash npm
99
+ npx e2e run --workers 4 --retries 0
100
+ ```
101
+
102
+ ```bash pnpm
103
+ pnpm exec e2e run --workers 4 --retries 0
104
+ ```
105
+
106
+ ```bash bun
107
+ bunx e2e run --workers 4 --retries 0
108
+ ```
109
+ </CodeGroup>
110
+
111
+ Add `E2E_TELEMETRY_DISABLED: '1'` to the job's `env` to send no
112
+ [telemetry](/telemetry#in-ci) from CI.
113
+
114
+ ## Sharding
115
+
116
+ `--shard <index/total>` runs one slice of the suite per job. Every job runs
117
+ the same command with its own index, and the same suite shards the same way
118
+ on every machine. A shard that gets no test fails with `NO_TESTS`; add
119
+ `--pass-with-no-tests` when a matrix may have more shards than tests. The
120
+ [CLI reference](/reference/cli#flags) has the slicing rules.
121
+
122
+ ```yaml
123
+ jobs:
124
+ e2e:
125
+ strategy:
126
+ fail-fast: false
127
+ matrix:
128
+ shard: [1, 2, 3]
129
+ steps:
130
+ # ...
131
+ - run: npx e2e run --shard ${{ matrix.shard }}/3 --reporter list,junit
132
+ ```
133
+
134
+ Each shard writes its own `report.json` and `junit.xml`; upload them under a
135
+ name that includes the shard index. Combining the documents into one is not
136
+ implemented yet.
137
+
138
+ ## Rerunning failures
139
+
140
+ `--last-failed` runs only the tests the previous run did not pass, read from
141
+ `report.json` in the [`output`](/reference/config#output) directory (`.e2e`
142
+ by default). The rerun empties `artifacts/` there when it starts, so
143
+ upload the first run's artifacts before rerunning in the same job if you want
144
+ both. The [CLI reference](/reference/cli#flags) lists what counts as not
145
+ passed. Locally it is the loop after a red run:
146
+
147
+ <CodeGroup>
148
+ ```bash npm
149
+ npx e2e run
150
+ npx e2e run --last-failed
151
+ ```
152
+
153
+ ```bash pnpm
154
+ pnpm exec e2e run
155
+ pnpm exec e2e run --last-failed
156
+ ```
157
+
158
+ ```bash bun
159
+ bunx e2e run
160
+ bunx e2e run --last-failed
161
+ ```
162
+ </CodeGroup>
163
+
164
+ In CI the report is a job artifact, not a file on the next runner; download
165
+ it into `.e2e/` before the rerun step, or rerun the failed job whole.
166
+
167
+ ## Model credentials
168
+
169
+ Pass the credential your configured provider needs, such as
170
+ `AI_GATEWAY_API_KEY` in the workflow above. See [Models](/models)
171
+ for provider setup. Tests that never use `agent` need no model credentials.
172
+
173
+ Store keys in CI secrets and use spending limits where available. The code
174
+ running in the job can read those keys, including test code and dependencies.
175
+ GitHub withholds secrets from fork pull requests. Fully replayed action
176
+ steps need no model call, but live actions and agent judgments still do.
177
+ Run untrusted code without secrets or write tokens. See the
178
+ [security model](/security).
179
+
180
+ ## Gating pull requests on agent steps
181
+
182
+ A failed agent step fails the job like a failed `expect`. Keep the checks
183
+ predictable by giving each `agent.act` one goal and checking its outcome
184
+ with a locator assertion or `agent.assert`.
185
+
186
+ To reuse verified actions in CI, [share the replay cache](/cache#commit-the-replay-cache).
187
+ A cache hit avoids a model call for that action step. Agent judgments still
188
+ run live, and a cache miss or hand-off uses the model.
189
+
190
+ CI retries once by default. A test that passes only on retry is reported as
191
+ flaky, so you can identify flows that need investigation.
192
+
193
+ `--max-failures <n>` stops the run once that many tests have failed, so a
194
+ broken deploy does not spend a model call on every remaining agent step. The
195
+ tests not started are skipped with cause `failure-limit`, the ones running
196
+ end as `interrupted`, and the job exits 1.
197
+
198
+ ## Exit codes
199
+
200
+ Any non-zero exit fails the job. [Debugging a run](/debugging#read-the-failure)
201
+ lists each code and whether a retry of the job can help.
202
+
203
+ <CardGroup cols={2}>
204
+ <Card title="Pull request comments" icon="code-pull-request" href="/github">
205
+ One comment per run, edited in place on a rerun.
206
+ </Card>
207
+ <Card title="CLI reference" icon="terminal" href="/reference/cli">
208
+ Flags, reporters, and every exit code.
209
+ </Card>
210
+ </CardGroup>
@@ -0,0 +1,183 @@
1
+ ---
2
+ title: Coding agents
3
+ description: Give a coding agent the skill, a live app session, and reports it can use to write and debug tests.
4
+ ---
5
+
6
+ `e2e init` installs a skill for writing and running tests, plus MCP
7
+ configuration for inspecting the app. Coding agents use the CLI to run
8
+ tests and the reports to investigate failures.
9
+
10
+ ## The skill
11
+
12
+ <CodeGroup>
13
+ ```bash npm
14
+ npx e2e init
15
+ ```
16
+
17
+ ```bash pnpm
18
+ pnpm dlx e2e init
19
+ ```
20
+
21
+ ```bash bun
22
+ bunx e2e init
23
+ ```
24
+ </CodeGroup>
25
+
26
+ | Path | Used by |
27
+ | --- | --- |
28
+ | `.agents/skills/e2e/` | Agents that read `.agents/skills` |
29
+ | `.claude/skills/e2e/` | Claude Code; a symlink to `.agents/skills/e2e/` when both are installed |
30
+
31
+ The copy holds `SKILL.md` and topic references; the link is the layout
32
+ `npx skills add` produces, so one copy serves every agent. Run `init` again
33
+ after upgrading e2e to refresh it.
34
+
35
+ Without `init`, `npx skills add tester-army/e2e` installs the skill from the
36
+ repository, and `npx e2e guide [topic]` prints it from the
37
+ installed package.
38
+
39
+ The package also ships these docs as `.mdx` pages in its `docs/` directory
40
+ (`node_modules/e2e/docs` in a single-package project), so an agent can read
41
+ any page offline. A link such as `/reference/cli` is `docs/reference/cli.mdx`.
42
+
43
+ For agents that need an explicit pointer, add this line to your project
44
+ instructions. `init` leaves those files unchanged:
45
+
46
+ ```md title="AGENTS.md"
47
+ End-to-end tests use e2e; read .agents/skills/e2e/SKILL.md before writing or running one.
48
+ ```
49
+
50
+ ## How an agent looks at the app
51
+
52
+ `e2e mcp` lets the coding agent open and interact with the app. Each agent,
53
+ subagents included, opens its own session, so several can drive the app at
54
+ once. Its `locate` tool checks a `screen.*` locator against the current app and returns
55
+ the test code when exactly one element matches.
56
+
57
+ `init` registers the server in `.mcp.json` for Claude Code and
58
+ `.cursor/mcp.json` for Cursor. To register it with Claude Code by hand:
59
+
60
+ <CodeGroup>
61
+ ```bash npm
62
+ claude mcp add e2e -- npx e2e mcp
63
+ ```
64
+
65
+ ```bash pnpm
66
+ claude mcp add e2e -- pnpm exec e2e mcp
67
+ ```
68
+
69
+ ```bash bun
70
+ claude mcp add e2e -- bunx e2e mcp
71
+ ```
72
+ </CodeGroup>
73
+
74
+ See the [MCP server reference](/reference/mcp) for its tools, session rules,
75
+ and flags. Run tests and read reports through the CLI.
76
+
77
+ ## How an agent writes a test
78
+
79
+ The skill tells the coding agent to read the config and an existing test
80
+ first. It uses `agent.act` for one goal at a time and checks the outcome
81
+ with `expect`. Known fields and exact values can use `screen` directly:
82
+
83
+ ```ts title="tests/checkout.e2e.ts"
84
+ import { test, expect, credentials } from 'e2e';
85
+
86
+ test('a signed-in user reaches checkout', async ({ screen, app, agent }) => {
87
+ const user = credentials.user('customer');
88
+ await app.open('/login');
89
+ await screen.getByLabel('Email').fill(user.username);
90
+ await screen.getByLabel('Password').fill(user.password);
91
+ await screen.getByRole('button', 'Sign in').click();
92
+ await expect(screen.getByRole('heading', 'Welcome back')).toBeVisible();
93
+
94
+ await agent.act('Add the cheapest item on the page to the cart and open the cart');
95
+ await expect(screen.getByRole('heading', 'Your cart')).toBeVisible();
96
+ });
97
+ ```
98
+
99
+ The main rules are:
100
+
101
+ - One `agent.act` per goal, followed by an `expect`. The assertion makes the
102
+ step's cache entry eligible for replay, and it is what fails when the agent
103
+ did the wrong thing.
104
+ - No sleeps. Locators poll, actions wait for their target, and `expect`
105
+ retries until its timeout.
106
+ - Secrets through `credentials.user(name)`, declared in the config, never
107
+ literal in a test.
108
+
109
+ ## How an agent runs it
110
+
111
+ <CodeGroup>
112
+ ```bash npm
113
+ npx e2e run tests/checkout.e2e.ts
114
+ ```
115
+
116
+ ```bash pnpm
117
+ pnpm exec e2e run tests/checkout.e2e.ts
118
+ ```
119
+
120
+ ```bash bun
121
+ bunx e2e run tests/checkout.e2e.ts
122
+ ```
123
+ </CodeGroup>
124
+
125
+ Run one file while iterating. For model configuration and credentials, see
126
+ [Models](/models). Fix CLI, config, and collection errors before
127
+ retrying a run.
128
+
129
+ ## How an agent reads the result
130
+
131
+ Every run that gets to its tests writes `.e2e/report.json`. For a report that is easier to read,
132
+ run:
133
+
134
+ <CodeGroup>
135
+ ```bash npm
136
+ npx e2e run tests/checkout.e2e.ts --reporter list,markdown
137
+ ```
138
+
139
+ ```bash pnpm
140
+ pnpm exec e2e run tests/checkout.e2e.ts --reporter list,markdown
141
+ ```
142
+
143
+ ```bash bun
144
+ bunx e2e run tests/checkout.e2e.ts --reporter list,markdown
145
+ ```
146
+ </CodeGroup>
147
+
148
+ This writes `.e2e/summary.md` and a page for each failed or flaky test under
149
+ `.e2e/failures/`. Start with the failure page. It includes the failing line,
150
+ steps, recent model turns, and the screen at failure.
151
+
152
+ When reading JSON, check `run.errors` for run-level failures, then the last
153
+ attempt of each failed result. Its `error`, `steps`, and `artifacts` show
154
+ what failed and how far the test got. `--reporter json` also prints the JSON
155
+ report to stdout.
156
+
157
+ For model-call details, use `--ai-trace` and read the trace with
158
+ [unbox-ai](/debugging#agent-steps). Avoid opening the raw trace in an agent's
159
+ context; it repeats prompts and can be several megabytes.
160
+
161
+ ## How an agent treats the cache
162
+
163
+ A verified `agent.act` can replay from `.e2e/cache/` on later runs. Use
164
+ `--no-cache` to check the live agent behavior after changing a test or to
165
+ investigate a replay failure. Pair it with `--ai-trace` to capture every
166
+ model call in the flow.
167
+
168
+ Do not edit recordings by hand. A failed read-write run removes implicated
169
+ entries so a later verified run can replace them. A failure where no model
170
+ answered implicates nothing and removes none. See
171
+ [Caching agent steps](/cache).
172
+
173
+ <CardGroup cols={2}>
174
+ <Card title="CLI reference" icon="terminal" href="/reference/cli">
175
+ init, guide, mcp, and run, flag by flag.
176
+ </Card>
177
+ <Card title="MCP server" icon="server" href="/reference/mcp">
178
+ Inspect the app before writing a test.
179
+ </Card>
180
+ <Card title="Debugging a run" icon="bug" href="/debugging">
181
+ The report, the artifacts, and the agent flags.
182
+ </Card>
183
+ </CardGroup>