@hasna/testers 0.0.60 → 0.0.62

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.
package/dist/cli/index.js CHANGED
@@ -13997,14 +13997,15 @@ async function launchBrowserEngine(engine, config) {
13997
13997
  }
13998
13998
  return launchPlaywright({ headless: config.headless, viewport: config.viewport });
13999
13999
  }
14000
- async function installBrowser(engine) {
14000
+ async function installBrowser(engine, options = {}) {
14001
14001
  if (engine === "lightpanda") {
14002
14002
  const { installLightpanda: installLightpanda2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
14003
14003
  return installLightpanda2();
14004
14004
  }
14005
14005
  const browserName = engine === "playwright-firefox" ? "firefox" : engine === "playwright-webkit" ? "webkit" : "chromium";
14006
+ const dependencyFlag = options.withDeps ? " --with-deps" : "";
14006
14007
  try {
14007
- execSync(`bunx playwright install ${browserName}`, {
14008
+ execSync(`bunx playwright install${dependencyFlag} ${browserName}`, {
14008
14009
  stdio: "inherit"
14009
14010
  });
14010
14011
  } catch (error) {
@@ -27425,6 +27426,14 @@ function buildSandboxCommand(input) {
27425
27426
  "--no-auto-generate",
27426
27427
  "--json"
27427
27428
  ];
27429
+ const installBrowserArgs = [
27430
+ "bunx",
27431
+ input.packageSpec,
27432
+ "install-browser",
27433
+ "--engine",
27434
+ "playwright",
27435
+ "--with-deps"
27436
+ ];
27428
27437
  return [
27429
27438
  "set -euo pipefail",
27430
27439
  buildBunBootstrapCommand(),
@@ -27434,6 +27443,7 @@ function buildSandboxCommand(input) {
27434
27443
  `cd ${shellQuote(input.appRemoteDir ?? input.remoteDir)}`,
27435
27444
  input.setupCommand,
27436
27445
  buildAppStartCommand(input),
27446
+ buildSandboxBrowserInstallCommand(installBrowserArgs),
27437
27447
  `HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
27438
27448
  ].filter(Boolean).join(`
27439
27449
  `);
@@ -27449,6 +27459,14 @@ function buildBunBootstrapCommand() {
27449
27459
  ].join(`
27450
27460
  `);
27451
27461
  }
27462
+ function buildSandboxBrowserInstallCommand(args) {
27463
+ return [
27464
+ 'if [ "${TESTERS_SANDBOX_SKIP_BROWSER_INSTALL:-}" != "1" ]; then',
27465
+ ` ${args.map(shellQuote).join(" ")}`,
27466
+ "fi"
27467
+ ].join(`
27468
+ `);
27469
+ }
27452
27470
  function buildAppStartCommand(input) {
27453
27471
  if (!input.appStartCommand)
27454
27472
  return;
@@ -95735,7 +95753,7 @@ import chalk6 from "chalk";
95735
95753
  // package.json
95736
95754
  var package_default = {
95737
95755
  name: "@hasna/testers",
95738
- version: "0.0.60",
95756
+ version: "0.0.62",
95739
95757
  description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
95740
95758
  type: "module",
95741
95759
  main: "dist/index.js",
@@ -99950,11 +99968,11 @@ program2.command("status").description("Show database and auth status").action((
99950
99968
  process.exit(1);
99951
99969
  }
99952
99970
  });
99953
- program2.command("install-browser").description("Install browser engine").option("--engine <engine>", "Engine to install: playwright, lightpanda, or all", "playwright").action(async (opts) => {
99971
+ program2.command("install-browser").description("Install browser engine").option("--engine <engine>", "Engine to install: playwright, lightpanda, or all", "playwright").option("--with-deps", "Install Playwright OS dependencies for fresh Linux sandboxes", false).action(async (opts) => {
99954
99972
  try {
99955
99973
  if (opts.engine === "all" || opts.engine === "playwright") {
99956
99974
  log(chalk6.blue("Installing Playwright Chromium..."));
99957
- await installBrowser("playwright");
99975
+ await installBrowser("playwright", { withDeps: opts.withDeps });
99958
99976
  log(chalk6.green("Playwright Chromium installed."));
99959
99977
  }
99960
99978
  if (opts.engine === "all" || opts.engine === "lightpanda") {
package/dist/index.js CHANGED
@@ -11546,14 +11546,15 @@ async function launchBrowserEngine(engine, config) {
11546
11546
  }
11547
11547
  return launchPlaywright({ headless: config.headless, viewport: config.viewport });
11548
11548
  }
11549
- async function installBrowser(engine) {
11549
+ async function installBrowser(engine, options = {}) {
11550
11550
  if (engine === "lightpanda") {
11551
11551
  const { installLightpanda: installLightpanda2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
11552
11552
  return installLightpanda2();
11553
11553
  }
11554
11554
  const browserName = engine === "playwright-firefox" ? "firefox" : engine === "playwright-webkit" ? "webkit" : "chromium";
11555
+ const dependencyFlag = options.withDeps ? " --with-deps" : "";
11555
11556
  try {
11556
- execSync(`bunx playwright install ${browserName}`, {
11557
+ execSync(`bunx playwright install${dependencyFlag} ${browserName}`, {
11557
11558
  stdio: "inherit"
11558
11559
  });
11559
11560
  } catch (error) {
@@ -17541,6 +17542,14 @@ function buildSandboxCommand(input) {
17541
17542
  "--no-auto-generate",
17542
17543
  "--json"
17543
17544
  ];
17545
+ const installBrowserArgs = [
17546
+ "bunx",
17547
+ input.packageSpec,
17548
+ "install-browser",
17549
+ "--engine",
17550
+ "playwright",
17551
+ "--with-deps"
17552
+ ];
17544
17553
  return [
17545
17554
  "set -euo pipefail",
17546
17555
  buildBunBootstrapCommand(),
@@ -17550,6 +17559,7 @@ function buildSandboxCommand(input) {
17550
17559
  `cd ${shellQuote(input.appRemoteDir ?? input.remoteDir)}`,
17551
17560
  input.setupCommand,
17552
17561
  buildAppStartCommand(input),
17562
+ buildSandboxBrowserInstallCommand(installBrowserArgs),
17553
17563
  `HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
17554
17564
  ].filter(Boolean).join(`
17555
17565
  `);
@@ -17565,6 +17575,14 @@ function buildBunBootstrapCommand() {
17565
17575
  ].join(`
17566
17576
  `);
17567
17577
  }
17578
+ function buildSandboxBrowserInstallCommand(args) {
17579
+ return [
17580
+ 'if [ "${TESTERS_SANDBOX_SKIP_BROWSER_INSTALL:-}" != "1" ]; then',
17581
+ ` ${args.map(shellQuote).join(" ")}`,
17582
+ "fi"
17583
+ ].join(`
17584
+ `);
17585
+ }
17568
17586
  function buildAppStartCommand(input) {
17569
17587
  if (!input.appStartCommand)
17570
17588
  return;
@@ -73,6 +73,8 @@ export declare function launchBrowserEngine(engine: import("../types/index.js").
73
73
  /**
74
74
  * Installs Chromium for Playwright using bunx.
75
75
  */
76
- export declare function installBrowser(engine?: import("../types/index.js").BrowserEngine): Promise<void>;
76
+ export declare function installBrowser(engine?: import("../types/index.js").BrowserEngine, options?: {
77
+ withDeps?: boolean;
78
+ }): Promise<void>;
77
79
  export {};
78
80
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/lib/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYhD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAC;CACpD;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAoE7E;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAA;CAAE,GAC7E,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtH;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAGjE,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAA;KAAE;IAQ/G;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAqC1D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,OAAO,mBAAmB,EAAE,aAAa,EACjD,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtG"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/lib/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYhD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAC;CACpD;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAoE7E;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAA;CAAE,GAC7E,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtH;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAGjE,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAA;KAAE;IAQ/G;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAqC1D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,OAAO,mBAAmB,EAAE,aAAa,EACjD,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,aAAa,EAClD,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CAiBf"}
package/dist/mcp/index.js CHANGED
@@ -52,7 +52,7 @@ var package_default;
52
52
  var init_package = __esm(() => {
53
53
  package_default = {
54
54
  name: "@hasna/testers",
55
- version: "0.0.60",
55
+ version: "0.0.62",
56
56
  description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
57
57
  type: "module",
58
58
  main: "dist/index.js",
@@ -16592,14 +16592,15 @@ async function launchBrowserEngine(engine, config) {
16592
16592
  }
16593
16593
  return launchPlaywright({ headless: config.headless, viewport: config.viewport });
16594
16594
  }
16595
- async function installBrowser(engine) {
16595
+ async function installBrowser(engine, options = {}) {
16596
16596
  if (engine === "lightpanda") {
16597
16597
  const { installLightpanda: installLightpanda2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
16598
16598
  return installLightpanda2();
16599
16599
  }
16600
16600
  const browserName = engine === "playwright-firefox" ? "firefox" : engine === "playwright-webkit" ? "webkit" : "chromium";
16601
+ const dependencyFlag = options.withDeps ? " --with-deps" : "";
16601
16602
  try {
16602
- execSync(`bunx playwright install ${browserName}`, {
16603
+ execSync(`bunx playwright install${dependencyFlag} ${browserName}`, {
16603
16604
  stdio: "inherit"
16604
16605
  });
16605
16606
  } catch (error) {
@@ -23816,6 +23817,14 @@ function buildSandboxCommand(input) {
23816
23817
  "--no-auto-generate",
23817
23818
  "--json"
23818
23819
  ];
23820
+ const installBrowserArgs = [
23821
+ "bunx",
23822
+ input.packageSpec,
23823
+ "install-browser",
23824
+ "--engine",
23825
+ "playwright",
23826
+ "--with-deps"
23827
+ ];
23819
23828
  return [
23820
23829
  "set -euo pipefail",
23821
23830
  buildBunBootstrapCommand(),
@@ -23825,6 +23834,7 @@ function buildSandboxCommand(input) {
23825
23834
  `cd ${shellQuote(input.appRemoteDir ?? input.remoteDir)}`,
23826
23835
  input.setupCommand,
23827
23836
  buildAppStartCommand(input),
23837
+ buildSandboxBrowserInstallCommand(installBrowserArgs),
23828
23838
  `HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
23829
23839
  ].filter(Boolean).join(`
23830
23840
  `);
@@ -23840,6 +23850,14 @@ function buildBunBootstrapCommand() {
23840
23850
  ].join(`
23841
23851
  `);
23842
23852
  }
23853
+ function buildSandboxBrowserInstallCommand(args) {
23854
+ return [
23855
+ 'if [ "${TESTERS_SANDBOX_SKIP_BROWSER_INSTALL:-}" != "1" ]; then',
23856
+ ` ${args.map(shellQuote).join(" ")}`,
23857
+ "fi"
23858
+ ].join(`
23859
+ `);
23860
+ }
23843
23861
  function buildAppStartCommand(input) {
23844
23862
  if (!input.appStartCommand)
23845
23863
  return;
@@ -15306,14 +15306,15 @@ async function launchBrowserEngine(engine, config) {
15306
15306
  }
15307
15307
  return launchPlaywright({ headless: config.headless, viewport: config.viewport });
15308
15308
  }
15309
- async function installBrowser(engine) {
15309
+ async function installBrowser(engine, options = {}) {
15310
15310
  if (engine === "lightpanda") {
15311
15311
  const { installLightpanda: installLightpanda2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
15312
15312
  return installLightpanda2();
15313
15313
  }
15314
15314
  const browserName = engine === "playwright-firefox" ? "firefox" : engine === "playwright-webkit" ? "webkit" : "chromium";
15315
+ const dependencyFlag = options.withDeps ? " --with-deps" : "";
15315
15316
  try {
15316
- execSync(`bunx playwright install ${browserName}`, {
15317
+ execSync(`bunx playwright install${dependencyFlag} ${browserName}`, {
15317
15318
  stdio: "inherit"
15318
15319
  });
15319
15320
  } catch (error) {
@@ -47090,7 +47091,7 @@ import { join as join14 } from "path";
47090
47091
  // package.json
47091
47092
  var package_default = {
47092
47093
  name: "@hasna/testers",
47093
- version: "0.0.60",
47094
+ version: "0.0.62",
47094
47095
  description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
47095
47096
  type: "module",
47096
47097
  main: "dist/index.js",
@@ -51657,6 +51658,14 @@ function buildSandboxCommand(input) {
51657
51658
  "--no-auto-generate",
51658
51659
  "--json"
51659
51660
  ];
51661
+ const installBrowserArgs = [
51662
+ "bunx",
51663
+ input.packageSpec,
51664
+ "install-browser",
51665
+ "--engine",
51666
+ "playwright",
51667
+ "--with-deps"
51668
+ ];
51660
51669
  return [
51661
51670
  "set -euo pipefail",
51662
51671
  buildBunBootstrapCommand(),
@@ -51666,6 +51675,7 @@ function buildSandboxCommand(input) {
51666
51675
  `cd ${shellQuote(input.appRemoteDir ?? input.remoteDir)}`,
51667
51676
  input.setupCommand,
51668
51677
  buildAppStartCommand(input),
51678
+ buildSandboxBrowserInstallCommand(installBrowserArgs),
51669
51679
  `HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
51670
51680
  ].filter(Boolean).join(`
51671
51681
  `);
@@ -51681,6 +51691,14 @@ function buildBunBootstrapCommand() {
51681
51691
  ].join(`
51682
51692
  `);
51683
51693
  }
51694
+ function buildSandboxBrowserInstallCommand(args) {
51695
+ return [
51696
+ 'if [ "${TESTERS_SANDBOX_SKIP_BROWSER_INSTALL:-}" != "1" ]; then',
51697
+ ` ${args.map(shellQuote).join(" ")}`,
51698
+ "fi"
51699
+ ].join(`
51700
+ `);
51701
+ }
51684
51702
  function buildAppStartCommand(input) {
51685
51703
  if (!input.appStartCommand)
51686
51704
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/testers",
3
- "version": "0.0.60",
3
+ "version": "0.0.62",
4
4
  "description": "AI-powered QA testing CLI — spawns cheap AI agents to test web apps with headless browsers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",