| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| e2e@0.21.3 source code.tar.gz | 2026-10-23 | 33.8 MB | |
| e2e@0.21.3 source code.zip | 2026-10-23 | 34.9 MB | |
| README.md | 2026-10-23 | 18.9 kB | |
| Totals: 3 Items | 68.7 MB | 0 | |
Patch Changes
-
#1219
f589a32Thanks @okwasniewski! - AddonActiontoagent.act: a hook that runs after each action once the screen settles, for replayed actions too. Use it to take a screenshot per action. -
#1326
04acca1Thanks @okwasniewski! -app.screenshot()returns the absolute path of the file it wrote, not a path relative to the attempt directory. -
#1218
58a5cecThanks @okwasniewski! - Keep screenshots after a secret fill.app.screenshot(),toHaveScreenshot(), and assertion and failure screenshots no longer stop once a test fills a secret. They mask secure fields only, andtoHaveScreenshot()still fails when the engine can't prove they are masked. The model still gets no pixels after a fill. -
#1072
689620dThanks @rudycelekli! - Do not report a cache entry as evicted when a custom store rejects its deletion. -
#1310
329e03fThanks @kacperkapusciak! - Add--action-timeout <ms>and--assertion-timeout <ms>toe2e run. They replace the config'sactionTimeoutandassertionTimeoutfor one run, so a wrong locator can fail in 5 s instead of 30 s while you write a test. A call's owntimeoutstill wins, and a value that is not an integer from 1 through 2147483647 is a usage error, exit 2. Watch mode keeps them for every rerun. -
#1240
332b934Thanks @kacperkapusciak! - Adde2e upgrade(aliase2e update): upgradese2eto the latest release, a dist-tag such asnightly, or one version, and moves each@e2e-dev/*package the project lists from the registry to the newest release whose peer ranges accept it. Linked packages and ones the registry doesn't have stay as they are. The project's package manager installs them;--dry-runprints the plan. Each upgrade sends ane2e_upgrade_completedtelemetry event with the result and thee2eversions before and after. The update notice now suggestse2e upgradeinstead of an install command fore2ealone. -
#1321
72abdddThanks @KrzysztofMoch! - The e2e plugin now installs in Cursor, from a copy in~/.cursor/plugins/local/, with the same three skills as the Claude Code and Codex plugin. Grok Build reads the Claude Code files, so the repository works there as a marketplace too. -
#1345
47127f7Thanks @okwasniewski! -decisionFilterleaves nothing out when the config file the run loaded changed, whatever its name, such ase2e list --config e2e.ci.config.ts --changed-since origin/mainafter an edit toe2e.ci.config.ts. A test filter reads that file ascontext.configFile. -
#1275
6a59d1aThanks @kacperkapusciak! - Update dependencies: the web engine drives Playwright 1.64.1 (and the Chromium it installs), and smol machines boot the matchingmcr.microsoft.com/playwright:v1.64.1-nobleimage. The runner moves tooxc-parser,oxc-transform, and@oxc-project/runtime0.154.0,@vitest/expect5.0.5, and@ai-sdk/provider4.0.28. -
#1286
a39c1c3Thanks @KrzysztofMoch! -expect(await response.json()).toMatchSchema(schema)type-checks:expectno longer hands the engine'sjson<T>()a locator type to infer, so the value matchers apply. -
#1252
3bd32efThanks @KrzysztofMoch! -e2e exploreand the MCPopen_sessionnow launch a device target's pinned app before their first observation, as a test'sapp.open()does. They no longer depend on the engine's warm-up having opened it, which it skips for a target with anapp.appPath, and used to fail withAPP_NOT_OPEN. -
#1306
3df649cThanks @knowbody! - Let retiring workers use the configured cleanup timeout for engine disposal so cleanup can finish and report errors before the worker exits. -
#1318
bbb13bfThanks @kacperkapusciak! -e2e init --example <name>starts a new project from one of the repository's example apps (with-vite,with-next,with-astro,with-expo,with-swiftui,with-compose,with-kotlin-multiplatform,with-flutter,with-maui). It downloads the example from the GitHub tag of the running CLI into an empty directory, points itse2eand engine ranges at this release, and then runs the usual skill, MCP, and install steps in the example's e2e project. -
#1280
1071933Thanks @kacperkapusciak! - Finde2e.config.jsande2e.config.mjsas well ase2e.config.tsande2e.config.mts, so a project written in plain JavaScript needs no--configflag. A TypeScript config still wins in its directory, so thee2e.config.jsthattscemits beside it is ignored.e2e initleaves an existing JavaScript config alone and writes its example test astests/example.e2e.js, and a run that finds only*.e2e.jsfiles names thetestsglob to set. The quickstart shows the JavaScript setup, and the config reference the details. -
#1317
9ceb071Thanks @kacperkapusciak! - Every action in ane2e mcpsession now answers with the test line that repeats it, such asTest line: await screen.getByRole("button", "Save").tap();, so a coding agent can write the test while it walks the flow. The locator comes from the node as the agent saw it and is checked against the live screen first: it must match that node and nothing else, and twins are narrowed with{ visible: true }, a container, or.nth(). When no locator works, the result says why and prints no line. Fills namecredentials.user(name)orsecrets.get(name), never a value. The new read-onlytest_linescatalog tool returns the session's lines in order as a draft test body. A project tool can no longer be namedtest_lines, and thee2e_mcp_sessiontelemetry event counts its calls under its own name. -
#973
93f77d8Thanks @A220man! - A model that refuses a request (finish reasoncontent-filter) now fails the step asMODEL_REFUSEDinstead ofMODEL_PROVIDER_FAILEDwith "No output generated". Rephrase the instruction or use another model. -
#1284
90e6fb8Thanks @KrzysztofMoch! -tap_atandhover_at, inagent.actande2e mcp, now act on the bare point the model aimed at whenever the engine takes one, instead of snapping to the listed control under it and acting on that control's center. Before, a point outside an iOS popover snapped to the full-screen dismiss region and tapped its center, inside the popover, so the popover never closed. An engine that taps listed nodes only still gets the control by id. -
#1049
137b50fThanks @rudycelekli! - Addlocator.or(other), which matches either locator in document order and stays strict when both match. Third-party engines must handle the newunionkind ofLocatorExpression. -
#1151
84bd64aThanks @TheTuso! - Agent steps on Claude Opus 5.5, Sonnet 5.5, and Fable 5.1 no longer fail withInvalid signature in thinking block. The block is bound to a different conversationon a worker's first step or after an earlier screen or screenshot was elided. -
#1301
82039adThanks @nguyenvanhieu1710! - RecordobservationTruncated: trueon an agent step when any semantic observation in the step was incomplete. -
#1239
d7ec0ecThanks @okwasniewski! - Addscreen.tree()andscreen.debug().tree()returns the whole screen as the agent reads it, one node per line with secrets redacted.debug()prints the same text to the test's output. -
#1314
b8cb0b3Thanks @kacperkapusciak! - The bundled agent skill now gives a coding agent a fast loop for fixing a test: rerun only that test byfile:linewith--action-timeout 5000, keep the replay cache on so goals that passed replay without model calls, add--retries 0when the config sets retries, don't rename the test or reword a passing goal mid-loop, and, when the test passes, run it one time with--no-cache. The coding agents guide no longer tells agents to add--no-cacheafter every change, and the caching guide has a section on rerunning a test while you fix it. -
#1309
c5e3248Thanks @kacperkapusciak! - The e2e skill now tells a coding agent how to fix a failed test. It fixes from the terminal's failure block and the trace page, every line that evidence covers at once, and checks the lines after the failure before the next run. To see a screen the evidence leaves out, it goes straight there in an MCP session instead of walking the flow again from the start. -
#1313
f7a34c1Thanks @kacperkapusciak! - The bundled agent skill now keeps ane2e mcpsession open between test runs while the agent writes or fixes a test on the web, so a live look after a failed run goes straight to the screen in that session instead of opening a new one. It says when a run can go beside the session: with noapp.command, with a port-0 URL (unless the dev server allows one copy per directory, asnext devdoes), or withreuseExisting: trueon a fixed port. A fixed port withoutreuseExistingmakes the run fail withAPP_ALREADY_RUNNING, so the agent offersreuseExisting: trueto the user instead of adding it, and closes the session before each run until then. WithreuseExistingandCIset, it unsetsCIfor the run or closes the session. On mobile it closes the session before each run. The MCP server page shows the same cases as a table. -
#1333
4982d8dThanks @KrzysztofMoch! - The e2e skill now explains what a frame from another site, such as a hosted card field, means for agent steps. The browser engine's semantic tree leaves out that frame's content, so the skill scripts steps there withbrowser.frameLocatorand judges the frame withvision. Anagent.actwhose only change is inside that frame records no replay and runs live every run. -
#1311
74c2b73Thanks @kacperkapusciak! - The bundled agent skill now tells a coding agent to start each test near the screen it checks, so every rerun skips the steps that lead there: in a browser a saved session instead of the sign-in form andapp.openon the screen's path, on a devicedevice.openLink, and data created through the app's API in atest.extendfixture. A test across several screens grows one screen at a time, with the goals already verified replaying from the cache. Core concepts says the same in one bullet. -
#1343
1ed4de1Thanks @kacperkapusciak! - The bundled agent skill now tells a coding agent to replace a fixed-time sleep withagent.waitForon the state it was waiting for, or a matcher with a longertimeoutwhen a locator names that state. -
#1216
19f3ca2Thanks @okwasniewski! - The run telemetry event now sorts executed tests by how the replay cache carried them (tests_code_only,tests_replayed,tests_assisted,tests_live), countsagent.actsteps that ran with the cache off (agent_steps_uncached), why steps missed the cache or handed off (agent_miss_reasons,agent_handoff_reasons), and the model calls by agent entry point (model_calls_act,model_calls_assert,model_calls_extract,model_calls_waitfor). -
#1206
da13624Thanks @okwasniewski! - Add test filters:filters: [decisionFilter({ model })]from@e2e-dev/decisionleaves out the tests a change can't affect. They run with--changed-since <ref>, such asorigin/mainon a pull request; without the flag every test runs.e2e list --changed-since origin/mainpreviews the decision, and left-out tests show in the pull request comment,junit.xml, and the report. A run with nothing to run starts no engine or app, and after Ctrl-C, or a reporter that runs past its deadline, the CLI exits as soon as the output is written. -
#1239
d7ec0ecThanks @okwasniewski! - Printconsole.logand other test output when thelistreporter is off. With--reporter json, all user output goes to stderr, so stdout holds only the report. -
#1323
0f6c3efThanks @kacperkapusciak! - Put the test's title path in agent prompts. Undere2e run, every step of the built-in agent and every judgment behindagent.assert,agent.waitFor, andagent.extractnow opens with aTest: <describe> > <test>line, and a custom executor reads the title path asctx.attempt.titlePath. The line goes in the step's prompt, not the system prompt, so provider prompt caching still serves every test of a run, and existing recordings keep replaying. -
#1238
7b6ac53Thanks @okwasniewski! - Print a notice after a command when a newere2eis on npm, with the install command for the project's package manager. The registry is checked once a day. Nothing prints in CI or when piped. SetE2E_UPDATE_CHECK_DISABLED=1orNO_UPDATE_NOTIFIER=1to turn it off.E2E_TELEMETRY_DISABLED=1andDO_NOT_TRACK=1turn it off too. -
#996
7e72ea2Thanks @rudycelekli! - Reject an invalidshardpassed torun()orlist()withINVALID_CONFIG, enforcing the same numeric bounds as the--shardflag. Both shard fields are required. -
#1209
ef977f4Thanks @knowbody! - Engine disposal receives optional revocable permission to preserve run-owned resources for a replacement worker. Final shutdown, forced termination, and parent disconnect revoke that permission while disposal is pending. Each worker still invokes an engine's disposal hook one time. Missing permission requests final cleanup, including direct and standalone calls.