Minor Changes
-
8c97c28: Update
@qawolf/api-contractsto 0.25.0. Environment responses now identify
the default environment, andqawolf run getincludes attempt artifacts and
failure diagnoses when available. -
d2460a7: Add
qawolf runner screenshot,act,execandkeepalive, so a caller with a shell and its own vision model can close the see-and-act loop against an interactive runner.qawolf runner screenshotwrites the runner's screen to a file, decoding the image on the way, and keeps the three ways it can have no image apart: the runner has not run anything yet, so nothing has started its screen (run a flow); the screen is up but cannot serve this instant (retry); the runner has no screen at all (launch a different image).qawolf runner act <action>performs one raw action in the computer-use vocabulary a vision model emits, validated against the published schema before it is sent, and accepts a whole action as JSON on stdin so a model's tool call can be forwarded unchanged.qawolf runner exec <file|->evaluates a snippet against the live page, with--fileto give it the scope of one of your own files; it reports whether the snippet ran, and points at theconsolestream for anything it printed.qawolf runner keepaliveresets a runner's inactivity clock for a caller that pauses between actions. -
7275358: Add
qawolf runner, a command group for driving an interactive runner on the QA Wolf platform.qawolf runner launchstarts one and makes it this directory's default;qawolf runner stopstops it.qawolf runner run <file>ships the current directory's runnable files and runs a flow on the runner, and with--followstreams the run's logs until the run settles.qawolf runner events <stream>prints a runner's journal one entry per line, so--tail,--since,--runand--followcompose withgrepandjq;--jsonprints the whole envelope. Every--followis bounded by--timeout(an hour by default), because reading a runner keeps it alive and billing.Runner-targeting commands take an optional
--runner <id>, falling back toQAWOLF_RUNNER_IDand then to the runner stored for the directory. A command with no runner available launches one and says so, naming it, so a caller knows the browser it is now driving is fresh. A launch that fails still names the runner it was launching, because a launch whose answer was lost may have started one: relaunching that same id attaches to it rather than starting a second.Under
--json, and so in CI, a followed run's logs are printed as journal entries rather than as bare text, which keeps everything the command writes to stdout parseable as one stream.
Patch Changes
-
a76fbcd:
qawolf runner screenshotasks for a runner that already has a screen instead of starting one, andqawolf runner execnames the missing page rather than the runner's image.A runner's virtual desktop starts with its first run, so a runner launched to serve a screenshot would have no screen and could only answer
screen-needs-a-run.screenshotrefuses instead, and names both things it needs: a runner, and a run on it. That also keeps the group readable, because noreadcommand starts a runner.A
node20WithPlaywrightrunner with no live page does run a browser and simply has nothing open on it yet, soqawolf runner execpoints at the page rather than at the runner's image. Checking the image stays as the secondary possibility, since it is the case that never clears. -
7275358:
qawolf runnernow passes on the reason QA Wolf gave for refusing a request, instead of only the status code.Running a file that is not a flow used to answer "runner.runFlow request failed (HTTP 400)" and stop there, while the server had already said which file was wrong and that an entry point has to be a flow file under
src/flows. That sentence now reaches the caller, onrun,stop,screenshot,actandexecalike.