opensteer 0.9.2 → 0.9.4

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 (39) hide show
  1. package/README.md +158 -165
  2. package/dist/{chunk-HD6KVZ42.js → chunk-GEUHKPC2.js} +46 -16
  3. package/dist/chunk-GEUHKPC2.js.map +1 -0
  4. package/dist/{chunk-2TIVULZY.js → chunk-GSCQQKZZ.js} +53 -9
  5. package/dist/chunk-GSCQQKZZ.js.map +1 -0
  6. package/dist/{chunk-KPYLS2KQ.js → chunk-HQCMXRBE.js} +5 -4
  7. package/dist/chunk-HQCMXRBE.js.map +1 -0
  8. package/dist/{chunk-BMPUL66S.js → chunk-T5P2QGZ3.js} +58 -53
  9. package/dist/chunk-T5P2QGZ3.js.map +1 -0
  10. package/dist/{chunk-FIMNKEG5.js → chunk-ZRF7WMS3.js} +4 -4
  11. package/dist/{chunk-FIMNKEG5.js.map → chunk-ZRF7WMS3.js.map} +1 -1
  12. package/dist/cli/bin.cjs +160 -72
  13. package/dist/cli/bin.cjs.map +1 -1
  14. package/dist/cli/bin.js +17 -7
  15. package/dist/cli/bin.js.map +1 -1
  16. package/dist/index.cjs +149 -69
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +19 -2
  19. package/dist/index.d.ts +19 -2
  20. package/dist/index.js +4 -4
  21. package/dist/local-view/public/assets/app.css +219 -55
  22. package/dist/local-view/public/assets/app.js +58 -2
  23. package/dist/local-view/public/index.html +101 -26
  24. package/dist/local-view/serve-entry.cjs +106 -57
  25. package/dist/local-view/serve-entry.cjs.map +1 -1
  26. package/dist/local-view/serve-entry.js +2 -2
  27. package/dist/opensteer-PJI7VUIT.js +6 -0
  28. package/dist/{opensteer-MIQ43CY4.js.map → opensteer-PJI7VUIT.js.map} +1 -1
  29. package/dist/{session-control-IFE3IPS3.js → session-control-M3JD7ZKA.js} +4 -4
  30. package/dist/{session-control-IFE3IPS3.js.map → session-control-M3JD7ZKA.js.map} +1 -1
  31. package/package.json +5 -5
  32. package/skills/opensteer/SKILL.md +7 -8
  33. package/skills/recorder/SKILL.md +43 -48
  34. package/dist/chunk-2TIVULZY.js.map +0 -1
  35. package/dist/chunk-BMPUL66S.js.map +0 -1
  36. package/dist/chunk-HD6KVZ42.js.map +0 -1
  37. package/dist/chunk-KPYLS2KQ.js.map +0 -1
  38. package/dist/opensteer-MIQ43CY4.js +0 -6
  39. package/skills/recorder/references/recorder-reference.md +0 -71
package/dist/index.cjs CHANGED
@@ -4039,6 +4039,20 @@ var opensteerBrowserContextOptionsSchema = objectSchema(
4039
4039
  {
4040
4040
  title: "OpensteerStealthProfileInput"
4041
4041
  }
4042
+ ),
4043
+ humanize: oneOfSchema(
4044
+ [
4045
+ { type: "boolean" },
4046
+ objectSchema(
4047
+ {
4048
+ mouse: { type: "boolean" },
4049
+ keyboard: { type: "boolean" },
4050
+ scroll: { type: "boolean" }
4051
+ },
4052
+ { title: "OpensteerHumanizeOptions" }
4053
+ )
4054
+ ],
4055
+ { title: "OpensteerHumanize" }
4042
4056
  )
4043
4057
  },
4044
4058
  {
@@ -12180,32 +12194,33 @@ var BROWSER_BRANDS = [
12180
12194
  }
12181
12195
  },
12182
12196
  {
12183
- id: "chromium",
12184
- displayName: "Chromium",
12197
+ id: "edge",
12198
+ displayName: "Microsoft Edge",
12185
12199
  darwin: {
12186
- executableCandidates: ["/Applications/Chromium.app/Contents/MacOS/Chromium"],
12187
- userDataDir: "~/Library/Application Support/Chromium",
12188
- bundleId: "org.chromium.Chromium",
12189
- processNames: ["/Applications/Chromium.app/Contents/MacOS/Chromium"]
12200
+ executableCandidates: ["/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"],
12201
+ userDataDir: "~/Library/Application Support/Microsoft Edge",
12202
+ bundleId: "com.microsoft.edgemac",
12203
+ processNames: ["/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"]
12190
12204
  },
12191
12205
  win32: {
12192
12206
  executableCandidates: [
12193
- path10.join(WINDOWS_PROGRAM_FILES, "Chromium", "Application", "chrome.exe"),
12194
- path10.join(WINDOWS_PROGRAM_FILES_X86, "Chromium", "Application", "chrome.exe"),
12195
- path10.join("~", "AppData", "Local", "Chromium", "Application", "chrome.exe")
12207
+ path10.join(WINDOWS_PROGRAM_FILES, "Microsoft", "Edge", "Application", "msedge.exe"),
12208
+ path10.join(WINDOWS_PROGRAM_FILES_X86, "Microsoft", "Edge", "Application", "msedge.exe"),
12209
+ path10.join("~", "AppData", "Local", "Microsoft", "Edge", "Application", "msedge.exe")
12196
12210
  ],
12197
- userDataDir: "~/AppData/Local/Chromium/User Data",
12198
- processNames: ["/chromium/application/chrome.exe"]
12211
+ userDataDir: "~/AppData/Local/Microsoft/Edge/User Data",
12212
+ processNames: ["/microsoft/edge/application/msedge.exe"]
12199
12213
  },
12200
12214
  linux: {
12201
12215
  executableCandidates: [
12202
- "/usr/bin/chromium",
12203
- "/usr/bin/chromium-browser",
12204
- resolveBinaryFromPath("chromium"),
12205
- resolveBinaryFromPath("chromium-browser")
12216
+ "/usr/bin/microsoft-edge",
12217
+ "/usr/bin/microsoft-edge-stable",
12218
+ "/opt/microsoft/msedge/msedge",
12219
+ resolveBinaryFromPath("microsoft-edge"),
12220
+ resolveBinaryFromPath("microsoft-edge-stable")
12206
12221
  ],
12207
- userDataDir: "~/.config/chromium",
12208
- processNames: ["/chromium", "/chromium-browser"]
12222
+ userDataDir: "~/.config/microsoft-edge",
12223
+ processNames: ["/microsoft-edge", "/microsoft-edge-stable", "/opt/microsoft/msedge/msedge"]
12209
12224
  }
12210
12225
  },
12211
12226
  {
@@ -12242,36 +12257,6 @@ var BROWSER_BRANDS = [
12242
12257
  processNames: ["/brave-browser", "/opt/brave.com/brave/brave-browser"]
12243
12258
  }
12244
12259
  },
12245
- {
12246
- id: "edge",
12247
- displayName: "Microsoft Edge",
12248
- darwin: {
12249
- executableCandidates: ["/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"],
12250
- userDataDir: "~/Library/Application Support/Microsoft Edge",
12251
- bundleId: "com.microsoft.edgemac",
12252
- processNames: ["/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"]
12253
- },
12254
- win32: {
12255
- executableCandidates: [
12256
- path10.join(WINDOWS_PROGRAM_FILES, "Microsoft", "Edge", "Application", "msedge.exe"),
12257
- path10.join(WINDOWS_PROGRAM_FILES_X86, "Microsoft", "Edge", "Application", "msedge.exe"),
12258
- path10.join("~", "AppData", "Local", "Microsoft", "Edge", "Application", "msedge.exe")
12259
- ],
12260
- userDataDir: "~/AppData/Local/Microsoft/Edge/User Data",
12261
- processNames: ["/microsoft/edge/application/msedge.exe"]
12262
- },
12263
- linux: {
12264
- executableCandidates: [
12265
- "/usr/bin/microsoft-edge",
12266
- "/usr/bin/microsoft-edge-stable",
12267
- "/opt/microsoft/msedge/msedge",
12268
- resolveBinaryFromPath("microsoft-edge"),
12269
- resolveBinaryFromPath("microsoft-edge-stable")
12270
- ],
12271
- userDataDir: "~/.config/microsoft-edge",
12272
- processNames: ["/microsoft-edge", "/microsoft-edge-stable", "/opt/microsoft/msedge/msedge"]
12273
- }
12274
- },
12275
12260
  {
12276
12261
  id: "vivaldi",
12277
12262
  displayName: "Vivaldi",
@@ -12310,6 +12295,35 @@ var BROWSER_BRANDS = [
12310
12295
  userDataDir: "~/Library/Application Support/net.imput.helium",
12311
12296
  processNames: ["/Applications/Helium.app/Contents/MacOS/Helium"]
12312
12297
  }
12298
+ },
12299
+ {
12300
+ id: "chromium",
12301
+ displayName: "Chromium",
12302
+ darwin: {
12303
+ executableCandidates: ["/Applications/Chromium.app/Contents/MacOS/Chromium"],
12304
+ userDataDir: "~/Library/Application Support/Chromium",
12305
+ bundleId: "org.chromium.Chromium",
12306
+ processNames: ["/Applications/Chromium.app/Contents/MacOS/Chromium"]
12307
+ },
12308
+ win32: {
12309
+ executableCandidates: [
12310
+ path10.join(WINDOWS_PROGRAM_FILES, "Chromium", "Application", "chrome.exe"),
12311
+ path10.join(WINDOWS_PROGRAM_FILES_X86, "Chromium", "Application", "chrome.exe"),
12312
+ path10.join("~", "AppData", "Local", "Chromium", "Application", "chrome.exe")
12313
+ ],
12314
+ userDataDir: "~/AppData/Local/Chromium/User Data",
12315
+ processNames: ["/chromium/application/chrome.exe"]
12316
+ },
12317
+ linux: {
12318
+ executableCandidates: [
12319
+ "/usr/bin/chromium",
12320
+ "/usr/bin/chromium-browser",
12321
+ resolveBinaryFromPath("chromium"),
12322
+ resolveBinaryFromPath("chromium-browser")
12323
+ ],
12324
+ userDataDir: "~/.config/chromium",
12325
+ processNames: ["/chromium", "/chromium-browser"]
12326
+ }
12313
12327
  }
12314
12328
  ];
12315
12329
  function getBrowserBrand(id) {
@@ -12392,10 +12406,15 @@ function resolveChromeExecutablePath(executablePath) {
12392
12406
  }
12393
12407
  return resolvedPath;
12394
12408
  }
12395
- for (const installation of detectLocalChromeInstallations()) {
12396
- if (installation.executablePath) {
12397
- return installation.executablePath;
12398
- }
12409
+ const chromeInstallation = detectLocalChromeInstallations().find(
12410
+ (installation) => installation.brand === "chrome" && installation.executablePath !== null
12411
+ );
12412
+ if (chromeInstallation?.executablePath) {
12413
+ return chromeInstallation.executablePath;
12414
+ }
12415
+ const brandedInstallation = detectInstalledBrowserBrands()[0];
12416
+ if (brandedInstallation) {
12417
+ return brandedInstallation.executablePath;
12399
12418
  }
12400
12419
  throw new Error(
12401
12420
  "Could not find a Chrome or Chromium executable. Pass browser.executablePath or --executable-path."
@@ -12833,10 +12852,11 @@ async function copyRootLevelEntries(input) {
12833
12852
  if (!entryStat.isDirectory()) {
12834
12853
  continue;
12835
12854
  }
12836
- if (SKIPPED_ROOT_DIRECTORIES.has(entry) || isProfileDirectory(input.sourceUserDataDir, entry)) {
12855
+ if (SKIPPED_ROOT_DIRECTORIES.has(entry)) {
12837
12856
  continue;
12838
12857
  }
12839
- if (input.copyMode === "session") {
12858
+ const profileDirectory = isProfileDirectory(input.sourceUserDataDir, entry);
12859
+ if (input.copyMode === "session" && !profileDirectory) {
12840
12860
  continue;
12841
12861
  }
12842
12862
  await promises.cp(sourcePath, targetPath, {
@@ -13934,9 +13954,13 @@ var OpensteerBrowserManager = class {
13934
13954
  this.workspace = normalizeWorkspace(options.workspace);
13935
13955
  this.mode = resolveBrowserMode(this.workspace, options.browser);
13936
13956
  this.browserOptions = isAttachBrowserOptions(options.browser) ? options.browser : void 0;
13937
- this.launchOptions = options.launch;
13938
- this.contextOptions = normalizeBrowserContextOptions(options.context);
13957
+ this.launchOptions = resolveLaunchOptions(options.launch, options.environment ?? process.env);
13939
13958
  this.engineName = options.engineName ?? DEFAULT_OPENSTEER_ENGINE;
13959
+ this.contextOptions = normalizeBrowserContextOptions(
13960
+ options.context,
13961
+ options.environment ?? process.env,
13962
+ this.engineName
13963
+ );
13940
13964
  assertSupportedEngineOptions({
13941
13965
  engineName: this.engineName,
13942
13966
  ...options.browser === void 0 ? {} : { browser: options.browser },
@@ -14448,6 +14472,26 @@ function normalizeWorkspace(workspace) {
14448
14472
  const normalized = workspace?.trim();
14449
14473
  return normalized === void 0 || normalized.length === 0 ? void 0 : normalized;
14450
14474
  }
14475
+ function resolveLaunchOptions(launch, environment) {
14476
+ if (launch?.executablePath !== void 0) {
14477
+ return launch;
14478
+ }
14479
+ const executablePath = normalizeConfiguredExecutablePath(environment.OPENSTEER_EXECUTABLE_PATH);
14480
+ if (executablePath === void 0) {
14481
+ return launch;
14482
+ }
14483
+ return {
14484
+ ...launch ?? {},
14485
+ executablePath
14486
+ };
14487
+ }
14488
+ function normalizeConfiguredExecutablePath(value) {
14489
+ if (value === void 0) {
14490
+ return void 0;
14491
+ }
14492
+ const trimmed = value.trim();
14493
+ return trimmed.length === 0 ? void 0 : trimmed;
14494
+ }
14451
14495
  function toPersistedLocalBrowserSessionRecord(workspace, live) {
14452
14496
  return {
14453
14497
  layout: "opensteer-session",
@@ -14543,7 +14587,7 @@ async function launchOwnedBrowser(input) {
14543
14587
  }
14544
14588
  function buildChromeArgs(userDataDir, launch, viewport, requestedRemoteDebuggingPort) {
14545
14589
  const isHeadless = launch?.headless ?? true;
14546
- const args = [
14590
+ const args = isHeadless ? [
14547
14591
  ...requestedRemoteDebuggingPort === void 0 ? ["--remote-debugging-port=0"] : [],
14548
14592
  "--no-first-run",
14549
14593
  "--no-default-browser-check",
@@ -14562,6 +14606,12 @@ function buildChromeArgs(userDataDir, launch, viewport, requestedRemoteDebugging
14562
14606
  "--password-store=basic",
14563
14607
  "--use-mock-keychain",
14564
14608
  `--user-data-dir=${userDataDir}`
14609
+ ] : [
14610
+ ...requestedRemoteDebuggingPort === void 0 ? ["--remote-debugging-port=0"] : [],
14611
+ "--no-first-run",
14612
+ "--no-default-browser-check",
14613
+ "--disable-blink-features=AutomationControlled",
14614
+ `--user-data-dir=${userDataDir}`
14565
14615
  ];
14566
14616
  if (isHeadless) {
14567
14617
  args.push("--headless=new");
@@ -14785,23 +14835,36 @@ function isMissingPackageError(error, packageName) {
14785
14835
  }
14786
14836
  return error.message.includes(`Cannot find package '${packageName}'`) || error.message.includes(`Cannot find module '${packageName}'`) || error.message.includes(`Cannot find module "${packageName}"`);
14787
14837
  }
14788
- function normalizeBrowserContextOptions(context) {
14838
+ function normalizeBrowserContextOptions(context, environment, engineName = DEFAULT_OPENSTEER_ENGINE) {
14789
14839
  const stealthProfile = resolveStealthProfile(context?.stealthProfile);
14790
14840
  const locale = context?.locale ?? stealthProfile?.locale;
14791
14841
  const timezoneId = context?.timezoneId ?? stealthProfile?.timezoneId;
14792
14842
  const userAgent = context?.userAgent ?? stealthProfile?.userAgent;
14843
+ const humanize = engineName === "abp" && context?.humanize === void 0 ? void 0 : resolveHumanizeOption(context?.humanize, environment);
14793
14844
  return {
14794
14845
  ...context ?? {},
14795
14846
  ...stealthProfile === void 0 ? {} : { stealthProfile },
14796
14847
  ...locale === void 0 ? {} : { locale },
14797
14848
  ...timezoneId === void 0 ? {} : { timezoneId },
14798
14849
  ...userAgent === void 0 ? {} : { userAgent },
14850
+ ...humanize === void 0 ? {} : { humanize },
14799
14851
  viewport: context?.viewport ?? stealthProfile?.viewport ?? {
14800
14852
  width: 1440,
14801
14853
  height: 900
14802
14854
  }
14803
14855
  };
14804
14856
  }
14857
+ function resolveHumanizeOption(explicit, environment) {
14858
+ if (explicit !== void 0) {
14859
+ return explicit;
14860
+ }
14861
+ const envValue = environment?.OPENSTEER_HUMANIZE;
14862
+ if (envValue !== void 0) {
14863
+ const normalized = envValue.trim().toLowerCase();
14864
+ return normalized !== "false" && normalized !== "0";
14865
+ }
14866
+ return void 0;
14867
+ }
14805
14868
  function toEngineBrowserContextOptions(context) {
14806
14869
  const { stealthProfile: _stealthProfile, ...engineContext } = context;
14807
14870
  return engineContext;
@@ -15628,7 +15691,7 @@ function resolveCloudConfig(input = {}) {
15628
15691
 
15629
15692
  // ../runtime-core/package.json
15630
15693
  var package_default = {
15631
- version: "0.2.2"};
15694
+ version: "0.2.3"};
15632
15695
 
15633
15696
  // ../runtime-core/src/version.ts
15634
15697
  var OPENSTEER_RUNTIME_CORE_VERSION = package_default.version;
@@ -19444,6 +19507,7 @@ function diffInteractionTraces(left, right) {
19444
19507
  // ../runtime-core/src/sdk/runtime.ts
19445
19508
  var MUTATION_CAPTURE_FINALIZE_TIMEOUT_MS = 5e3;
19446
19509
  var PERSISTED_NETWORK_FLUSH_TIMEOUT_MS = 5e3;
19510
+ var PERSISTED_NETWORK_SETTLE_POLL_MS = 25;
19447
19511
  var PENDING_OPERATION_EVENT_CAPTURE_LIMIT = 64;
19448
19512
  var PENDING_OPERATION_EVENT_CAPTURE_SKEW_MS = 1e3;
19449
19513
  var REPLAY_PROBE_MIN_ATTEMPT_TIMEOUT_MS = 3e3;
@@ -22218,15 +22282,22 @@ var OpensteerSessionRuntime = class {
22218
22282
  return [];
22219
22283
  }
22220
22284
  const root = await this.ensureRoot();
22221
- const browserRecords = await this.readBrowserNetworkRecords(
22222
- {
22223
- includeBodies: true,
22224
- includeCurrentPageOnly: options.includeCurrentPageOnly,
22225
- ...options.pageRef === void 0 ? {} : { pageRef: options.pageRef },
22226
- requestIds
22227
- },
22228
- signal
22229
- );
22285
+ let browserRecords = [];
22286
+ for (; ; ) {
22287
+ browserRecords = await this.readBrowserNetworkRecords(
22288
+ {
22289
+ includeBodies: true,
22290
+ includeCurrentPageOnly: options.includeCurrentPageOnly,
22291
+ ...options.pageRef === void 0 ? {} : { pageRef: options.pageRef },
22292
+ requestIds
22293
+ },
22294
+ signal
22295
+ );
22296
+ if (browserRecords.length === requestIds.length && browserRecords.every((record) => record.captureState !== "pending")) {
22297
+ break;
22298
+ }
22299
+ await delayWithSignal(PERSISTED_NETWORK_SETTLE_POLL_MS, signal);
22300
+ }
22230
22301
  return this.networkHistory.persist(browserRecords, root.registry.savedNetwork, {
22231
22302
  bodyWriteMode: "authoritative",
22232
22303
  redactSecretHeaders: false
@@ -25706,8 +25777,10 @@ var OpensteerRuntime = class extends OpensteerSessionRuntime {
25706
25777
  super(
25707
25778
  buildSharedRuntimeOptions({
25708
25779
  name: publicWorkspace ?? "default",
25780
+ ...options.rootDir === void 0 ? {} : { rootDir: options.rootDir },
25709
25781
  rootPath,
25710
25782
  ...publicWorkspace === void 0 ? {} : { workspaceName: publicWorkspace },
25783
+ ...options.environment === void 0 ? {} : { environment: options.environment },
25711
25784
  ...options.browser === void 0 ? {} : { browser: options.browser },
25712
25785
  ...options.launch === void 0 ? {} : { launch: options.launch },
25713
25786
  ...options.context === void 0 ? {} : { context: options.context },
@@ -25738,7 +25811,9 @@ var OpensteerSessionRuntime2 = class extends OpensteerSessionRuntime {
25738
25811
  super(
25739
25812
  buildSharedRuntimeOptions({
25740
25813
  name: options.name,
25814
+ ...options.rootDir === void 0 ? {} : { rootDir: options.rootDir },
25741
25815
  rootPath,
25816
+ ...options.environment === void 0 ? {} : { environment: options.environment },
25742
25817
  ...options.browser === void 0 ? {} : { browser: options.browser },
25743
25818
  ...options.launch === void 0 ? {} : { launch: options.launch },
25744
25819
  ...options.context === void 0 ? {} : { context: options.context },
@@ -25759,9 +25834,11 @@ var OpensteerSessionRuntime2 = class extends OpensteerSessionRuntime {
25759
25834
  function buildSharedRuntimeOptions(input) {
25760
25835
  const ownership = resolveOwnership(input.browser);
25761
25836
  const engineFactory = input.engineFactory ?? ((factoryOptions) => new OpensteerBrowserManager({
25837
+ ...input.rootDir === void 0 ? {} : { rootDir: input.rootDir },
25762
25838
  rootPath: input.rootPath,
25763
25839
  ...input.workspaceName === void 0 ? {} : { workspace: input.workspaceName },
25764
25840
  engineName: input.engineName,
25841
+ ...input.environment === void 0 ? {} : { environment: input.environment },
25765
25842
  ...(factoryOptions.browser ?? input.browser) === void 0 ? {} : { browser: factoryOptions.browser ?? input.browser },
25766
25843
  ...(factoryOptions.launch ?? input.launch) === void 0 ? {} : { launch: factoryOptions.launch ?? input.launch },
25767
25844
  ...(factoryOptions.context ?? input.context) === void 0 ? {} : { context: factoryOptions.context ?? input.context }
@@ -25822,9 +25899,10 @@ function resolveOpensteerRuntimeConfig(input = {}) {
25822
25899
  function createOpensteerSemanticRuntime(input = {}) {
25823
25900
  const runtimeOptions = input.runtimeOptions ?? {};
25824
25901
  const engine = input.engine ?? runtimeOptions.engineName ?? DEFAULT_OPENSTEER_ENGINE;
25902
+ const environment = input.environment ?? process.env;
25825
25903
  const config = resolveOpensteerRuntimeConfig({
25826
25904
  ...input.provider === void 0 ? {} : { provider: input.provider },
25827
- ...input.environment === void 0 ? {} : { environment: input.environment }
25905
+ environment
25828
25906
  });
25829
25907
  assertProviderSupportsEngine(config.provider.mode, engine);
25830
25908
  if (config.provider.mode === "cloud") {
@@ -25839,7 +25917,8 @@ function createOpensteerSemanticRuntime(input = {}) {
25839
25917
  }
25840
25918
  return new OpensteerRuntime({
25841
25919
  ...runtimeOptions,
25842
- engineName: engine
25920
+ engineName: engine,
25921
+ environment
25843
25922
  });
25844
25923
  }
25845
25924
 
@@ -25894,6 +25973,7 @@ var Opensteer = class {
25894
25973
  ...runtimeOptions.rootPath === void 0 ? {} : { rootPath: runtimeOptions.rootPath },
25895
25974
  ...runtimeOptions.workspace === void 0 ? {} : { workspace: runtimeOptions.workspace },
25896
25975
  ...engineName === void 0 ? {} : { engineName },
25976
+ environment,
25897
25977
  ...runtimeOptions.browser === void 0 ? {} : { browser: runtimeOptions.browser },
25898
25978
  ...runtimeOptions.launch === void 0 ? {} : { launch: runtimeOptions.launch },
25899
25979
  ...runtimeOptions.context === void 0 ? {} : { context: runtimeOptions.context }