@validate.qa/runner 1.0.102 → 1.0.104

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 (32) hide show
  1. package/README.md +7 -2
  2. package/dist/{chunk-E2VEMBQQ.mjs → chunk-6N4QCCEH.mjs} +2 -2
  3. package/dist/{chunk-ZZYBRIBT.mjs → chunk-EBWZ7NGU.mjs} +11 -8
  4. package/dist/{chunk-3JM6XTSZ.mjs → chunk-EKY6CN4Y.mjs} +660 -123
  5. package/dist/{chunk-DN3O6EYT.mjs → chunk-MEE4DXRX.mjs} +19834 -3064
  6. package/dist/{chunk-CBVHPYVJ.mjs → chunk-OXDU6ARE.mjs} +86 -7
  7. package/dist/{chunk-AAUHXGDS.mjs → chunk-PUMRAFJS.mjs} +37 -13
  8. package/dist/{chunk-4WLP3RWN.mjs → chunk-TGVKABFN.mjs} +45 -3
  9. package/dist/{chunk-5DFBEL72.mjs → chunk-TS4OUJVT.mjs} +1 -1
  10. package/dist/{chunk-BXLEPT4M.mjs → chunk-UR7KDOTP.mjs} +32 -8
  11. package/dist/{chunk-E2RRAE27.mjs → chunk-UZ67UBXH.mjs} +14 -3
  12. package/dist/{chunk-HJ6FKHMM.mjs → chunk-VWE3SQ2Z.mjs} +1 -1
  13. package/dist/{chunk-PWFWMVZU.mjs → chunk-XXZZMG6Q.mjs} +15 -3
  14. package/dist/cli.js +35519 -17101
  15. package/dist/cli.mjs +1171 -251
  16. package/dist/credential-mcp-server.js +750 -133
  17. package/dist/credential-mcp-server.mjs +3 -3
  18. package/dist/discovery-mcp-server.js +714 -132
  19. package/dist/discovery-mcp-server.mjs +4 -4
  20. package/dist/dist-BXHLIG5H.mjs +17 -0
  21. package/dist/inbox-mcp-server.js +743 -129
  22. package/dist/inbox-mcp-server.mjs +3 -3
  23. package/dist/route-seed-worker.js +672 -125
  24. package/dist/route-seed-worker.mjs +3 -3
  25. package/dist/run-write-guard-preload.js +714 -126
  26. package/dist/run-write-guard-preload.mjs +4 -4
  27. package/dist/run-write-guard.js +714 -126
  28. package/dist/run-write-guard.mjs +3 -3
  29. package/dist/tar-extract-child.js +38 -14
  30. package/dist/tar-extract-child.mjs +2 -2
  31. package/package.json +3 -2
  32. package/dist/dist-52M5RDZ6.mjs +0 -17
package/README.md CHANGED
@@ -30,9 +30,12 @@ npm install -g @validate.qa/runner
30
30
  Generate a runner token from your validate.qa **Project Settings → Local Runner**. Your credentials will be saved securely to `~/.validate.qa/credentials.json`.
31
31
 
32
32
  ```bash
33
- npx @validate.qa/runner login --token urt_xxxxxxxxxxxx --server https://your-server.com
33
+ npx @validate.qa/runner login --server https://your-server.com
34
+ # Paste the runner token (urt_...) at the prompt; it is not shown, and it stays out of shell history and `ps`.
34
35
  ```
35
36
 
37
+ In a script, pipe it on stdin instead (`... login --server <url> < token.txt`). `--token urt_...` still works, but on the command line the token lands in your shell history.
38
+
36
39
  ### 3. Start the Runner
37
40
 
38
41
  Starts the runner daemon, polling for pending test runs from the cloud and executing them locally:
@@ -92,8 +95,8 @@ The cloud runner image (`Dockerfile.runner`) sets `RUNNER_TEST_SANDBOX=required`
92
95
  #### `login`
93
96
  ```bash
94
97
  npx @validate.qa/runner login \
95
- --token <token> \ # Runner token (urt_...) from dashboard
96
98
  --server <url> \ # validate.qa server URL
99
+ --token <token> \ # Optional: runner token (urt_...); left out, it is read at a hidden prompt or from stdin
97
100
  --project <id> # Optional: Project ID (embedded in urt_ tokens)
98
101
  ```
99
102
 
@@ -115,6 +118,8 @@ npx @validate.qa/runner status
115
118
  # Shows: Server URL, Project ID, Token (masked), Connection status
116
119
  ```
117
120
 
121
+ It exits 0 only when the server answers the health check with your token. It exits 1 when no credentials are saved, the server can't be reached, or the server refuses the token (401/403) or the request, so a script can run it before `start`.
122
+
118
123
  #### `doctor`
119
124
  ```bash
120
125
  npx @validate.qa/runner doctor
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  require_run_write_guard
3
- } from "./chunk-4WLP3RWN.mjs";
3
+ } from "./chunk-TGVKABFN.mjs";
4
4
  import {
5
5
  require_survey_network_guard
6
- } from "./chunk-E2RRAE27.mjs";
6
+ } from "./chunk-UZ67UBXH.mjs";
7
7
  import {
8
8
  __commonJS,
9
9
  __require
@@ -2,11 +2,11 @@ import {
2
2
  require_google_signin,
3
3
  require_harness_init_script,
4
4
  require_test_inbox_broker
5
- } from "./chunk-CBVHPYVJ.mjs";
5
+ } from "./chunk-OXDU6ARE.mjs";
6
6
  import {
7
7
  dist_exports,
8
8
  init_dist
9
- } from "./chunk-3JM6XTSZ.mjs";
9
+ } from "./chunk-EKY6CN4Y.mjs";
10
10
  import {
11
11
  __commonJS,
12
12
  __require,
@@ -179,7 +179,6 @@ var require_browser_config = __commonJS({
179
179
  exports.NO_ERROR_PAGE_RELOAD_ARG,
180
180
  "--disable-dev-shm-usage",
181
181
  "--disable-gpu",
182
- "--disable-software-rasterizer",
183
182
  "--no-zygote",
184
183
  "--disable-accelerated-2d-canvas",
185
184
  "--js-flags=--max-old-space-size=512"
@@ -4020,6 +4019,7 @@ var require_cli_browser_socket = __commonJS({
4020
4019
  exports.assertSlotLease = assertSlotLease;
4021
4020
  exports.prepareSessionSocket = prepareSessionSocket;
4022
4021
  exports.assertLaunchOpensNoPort = assertLaunchOpensNoPort;
4022
+ exports.devtoolsSwitchInCmdline = devtoolsSwitchInCmdline;
4023
4023
  exports.assertBrowserProcessOpensNoPort = assertBrowserProcessOpensNoPort;
4024
4024
  exports.confineOutputDirPaths = confineOutputDirPaths;
4025
4025
  exports.openCliBrowserSocket = openCliBrowserSocket;
@@ -4332,6 +4332,9 @@ var require_cli_browser_socket = __commonJS({
4332
4332
  }
4333
4333
  return children;
4334
4334
  }
4335
+ function devtoolsSwitchInCmdline(cmdline) {
4336
+ return cmdline.split(/[\0\s]+/).find((arg) => DEVTOOLS_ENDPOINT_SWITCH.test(arg));
4337
+ }
4335
4338
  async function assertBrowserProcessOpensNoPort(rootPid) {
4336
4339
  if (process.platform !== "linux")
4337
4340
  return;
@@ -4344,15 +4347,15 @@ var require_cli_browser_socket = __commonJS({
4344
4347
  if (pids.length === 0)
4345
4348
  throw new CliBrowserSocketUnsafeError("could not find the browser process to check");
4346
4349
  for (const pid of pids) {
4347
- let argv;
4350
+ let cmdline;
4348
4351
  try {
4349
- argv = (await (0, promises_1.readFile)(`/proc/${pid}/cmdline`, "utf8")).split("\0");
4352
+ cmdline = await (0, promises_1.readFile)(`/proc/${pid}/cmdline`, "utf8");
4350
4353
  } catch (error) {
4351
4354
  if (!rootPid && error.code === "ENOENT")
4352
4355
  continue;
4353
4356
  throw new CliBrowserSocketUnsafeError(`could not read the command line of the browser (pid ${pid})`);
4354
4357
  }
4355
- const flag = argv.find((arg) => DEVTOOLS_ENDPOINT_SWITCH.test(arg));
4358
+ const flag = devtoolsSwitchInCmdline(cmdline);
4356
4359
  if (flag)
4357
4360
  throw new CliBrowserSocketUnsafeError(`the browser (pid ${pid}) was started with ${flag}`);
4358
4361
  }
@@ -5733,6 +5736,8 @@ var require_credential_mcp_server = __commonJS({
5733
5736
 
5734
5737
  export {
5735
5738
  require_browser_config,
5739
+ require_proc_table,
5740
+ require_kill_tree,
5736
5741
  require_cloud_runner,
5737
5742
  require_runs_dir,
5738
5743
  require_repo_read_sandbox,
@@ -5745,8 +5750,6 @@ export {
5745
5750
  require_mcp_redaction_secrets,
5746
5751
  require_playwright_mcp_server,
5747
5752
  require_mcp_rooted_client,
5748
- require_proc_table,
5749
- require_kill_tree,
5750
5753
  require_playwright_mcp_config,
5751
5754
  require_cli_browser_socket,
5752
5755
  require_credential_reference,