Releases: qawolf/cli
Release list
v1.2.0
Minor Changes
-
c2e13b2: Support Node 20. The
engines.nodefloor is lowered to>=20.19.0, and on Node
versions without native TypeScript support (Node 20, and Node 22.15–22.17) flows
are now loaded through the@oxc-node/coreESM loader, which transpiles and
resolves TypeScript at runtime. Bun and Node 22.18+ are unaffected. A CI matrix
smoke-tests the published bundle on Node 20, 22, 24, and Bun.Note: the
@qawolf/*platform packages currently declareengines.node >=22.22.0,
so installing on Node 20 printsEBADENGINEwarnings. They are verified to run on
Node 20.19, and the warnings are non-fatal unlessengine-strictis enabled.
Patch Changes
- cae4b3d: Provide shared local flow runtime dependencies for email inboxes and environment variable persistence across web and Android flows.
- f69f2de: Fix
ERR_MODULE_NOT_FOUNDfor correctly declared flow dependencies: dependency discovery now validates an ancestornode_modulesbefore reusing it, and falls back to installing the project's declared deps when none satisfies them (reported asInstalling N project dependencies…).
v1.1.0
Minor Changes
- 38f4903: Resolve flow runtime dependencies through a layered, project-isolated
node_modulesso flows run correctly in monorepos, single-package projects, and empty directories across both the Node and compiled-binary channels. The CLI-owned executor is always pinned and never pollutes or is shadowed by the surrounding project, while the flow's own declared dependencies still resolve. Addsqawolf install clearto wipe the managed runtime cache.
Patch Changes
- 2d98dc9: Exit
flows rundeterministically once the run completes. The flow runtime can launch browser processes (e.g. a channel-launched Google Chrome) whose CDP sockets and timers keep Node's event loop alive after teardown, so the CLI previously printed its results and then hung indefinitely. The process now flushes stdout/stderr and exits with the run's exit code (1 on flow failure, 0 on pass) as soon as the command resolves, with a backstop in case a stream stalls. - 5a81d70: Resolve the
#playwrightsubpath import when running flows in the isolated managed runtime. QA Wolf flow bundles import Playwright through a Node.jsimportsalias (#playwright), but the pulled bundle'spackage.jsonomits theimportsfield, so the stagedexec/package.jsoncould not resolve it and flows failed withERR_PACKAGE_IMPORT_NOT_DEFINED. The CLI now merges the#playwrightalias into the stagedexec/package.json, pointing it at the pinned Playwright resolved through the inner-hopnode_modulessymlink — fixing both the Node import path and the compiled-binary bundle path. - 621f5d4: Resolve flow imports whose specifier uses a
.tsextension but ships as.js(and vice versa). Platform-generated bundles often import sibling utilities as.tswhile the file on disk is.js; native Node ESM resolves extensions literally and throwsERR_MODULE_NOT_FOUND. A synchronousmodule.registerHooksresolve hook now transparently retries the sibling source extension (.ts↔.js,.mts↔.mjs,.cts↔.cjs) only on resolution failure — literal matches always win and nothing is rewritten on disk. Raises the Node engine floor to>=22.15.0, the release that introduced synchronous hooks.
v1.0.1
Patch Changes
- 99e891c: Change the default
flows runoutput directory fromqawolf-outputto.qawolf/output, so run artifacts (videos, traces, HAR) land under the.qawolf/directory thatqawolf initgitignores. Pass--output-dirto override. - f58d9cd: Save HAR and trace artifacts reliably from
flows run. HAR (and video) could be silently dropped because contexts and browsers were closed concurrently, racing Playwright's artifact flush; contexts now close first. The--traceflag is now wired end-to-end and writes a Playwright trace to<output-dir>/trace/<flow>.zip, honoringon,off, andretain-on-failure. - 3b4fdb7: Normalize the
binentry todist/cli.jsso npm no longer rewrites it (with a publish warning) when publishing. - 238d11a: Round-trip environment variables whose keys are not POSIX shell identifiers (e.g. OTP URIs keyed by email) when running flows locally, instead of failing or dropping them.
- 51e8fc3: Wire
flows run --timeoutinto the web flow expect timeout. Previously the flag only set Playwright's per-action timeout, so assertion failures still waited the hardcoded 30s default; it now applies to actions and assertions alike.
v1.0.0
Major Changes
-
9b946e0: Initial public release of the QA Wolf CLI — run QA Wolf flows from your terminal or CI.
Highlights:
qawolf auth login— authenticate with QA Wolf (or setQAWOLF_API_KEYin CI)qawolf flows run --env <env-id>— pull and run your team's flows locallyqawolf flows pull— refresh the local flow cacheqawolf run create --environment-id <env-id>— trigger a run of your flows on the QA Wolf platformqawolf install— install runtime dependencies (browsers, Android tooling)qawolf init— scaffold a local-only projectqawolf doctor— diagnose setup problems
Install with
npm install -g @qawolf/cli(Node 22+), try it withnpx @qawolf/cli --help, or download a standalone binary for Linux, macOS, or Windows from GitHub Releases. Full documentation at docs.qawolf.com.
Minor Changes
- 61fa3f6: Add a contract-driven public API command layer: every contract published in
@qawolf/api-contractsautomatically becomes aqawolf <namespace> <action>command, starting withqawolf run create. - 03817c8: Add the
qawolf-cliAgent Skill (skills/qawolf-cli/SKILL.md): lean, task-first guidance for coding agents — auth, output modes, read/write safety, and a command index that delegates flag reference toqawolf <command> --help. Theskills/directory ships in the npm package.
Patch Changes
- d7ea923: Agent mode (
--agent) now emits structured results as JSON on stdout (human-readable progress stays on stderr). - 5905699: Exit with code 3 (auth) instead of 1 when the API key is missing or invalid, and clean up
--helpoutput: remove an internal note from the--traceflag description and give theruncommand group a curated description. - 9cbd6c2: Harden tar extraction in
flows pullto reject archive entries with an unknown size, and restore flow-discovery and runner logging inflows run --envmode.