@swmansion/argent 0.16.1-next.6 → 0.16.1-next.8

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.
@@ -105217,7 +105217,7 @@ async function shutdown(timeoutMs = SHORT_FLUSH_TIMEOUT_MS) {
105217
105217
  // ../tool-server/src/http.ts
105218
105218
  var import_express3 = __toESM(require_express2());
105219
105219
  var import_bytes2 = __toESM(require_bytes());
105220
- var import_node_fs10 = require("node:fs");
105220
+ var import_node_fs11 = require("node:fs");
105221
105221
  var import_promises9 = require("node:fs/promises");
105222
105222
  var import_node_os8 = require("node:os");
105223
105223
  var import_node_path9 = require("node:path");
@@ -105268,7 +105268,7 @@ init_android_binary();
105268
105268
  // ../tool-server/src/utils/vega-cli.ts
105269
105269
  var import_node_child_process4 = require("node:child_process");
105270
105270
  var import_node_util3 = require("node:util");
105271
- var import_node_fs4 = require("node:fs");
105271
+ var import_node_fs5 = require("node:fs");
105272
105272
  var import_promises3 = require("node:fs/promises");
105273
105273
  var import_node_os3 = require("node:os");
105274
105274
  var import_node_path3 = require("node:path");
@@ -105278,7 +105278,9 @@ init_subprocess_error();
105278
105278
  // ../tool-server/src/utils/vega-process.ts
105279
105279
  var import_node_child_process3 = require("node:child_process");
105280
105280
  var import_node_util2 = require("node:util");
105281
+ var import_node_fs4 = require("node:fs");
105281
105282
  var execFileAsync2 = (0, import_node_util2.promisify)(import_node_child_process3.execFile);
105283
+ var PS_BIN = ["/bin/ps", "/usr/bin/ps"].find((p) => (0, import_node_fs4.existsSync)(p)) ?? "ps";
105282
105284
  var PS_ARGS = ["-A", "-ww", "-o", "command="];
105283
105285
  var PS_ARGS_WITH_PID = ["-A", "-ww", "-o", "pid=,command="];
105284
105286
  var VVD_PROCESS_RE = /(?:^|\/)(?:vega|kepler)-virtual-device(?:\s|$)/;
@@ -105312,7 +105314,7 @@ function parseVvdPids(psOutput) {
105312
105314
  }
105313
105315
  async function listRunningVvdConsolePorts() {
105314
105316
  try {
105315
- const { stdout } = await execFileAsync2("ps", [...PS_ARGS], {
105317
+ const { stdout } = await execFileAsync2(PS_BIN, [...PS_ARGS], {
105316
105318
  timeout: VVD_PS_PROBE_TIMEOUT_MS,
105317
105319
  maxBuffer: 16 * 1024 * 1024
105318
105320
  });
@@ -105327,7 +105329,7 @@ async function listRunningVvdConsolePorts() {
105327
105329
  }
105328
105330
  async function listRunningVvdPids() {
105329
105331
  try {
105330
- const { stdout } = await execFileAsync2("ps", [...PS_ARGS_WITH_PID], {
105332
+ const { stdout } = await execFileAsync2(PS_BIN, [...PS_ARGS_WITH_PID], {
105331
105333
  timeout: 5e3,
105332
105334
  maxBuffer: 16 * 1024 * 1024
105333
105335
  });
@@ -105347,7 +105349,7 @@ var VEGA_BINARY_TTL_MS = 6e4;
105347
105349
  var cachedVegaBinary;
105348
105350
  async function isExecutable(p) {
105349
105351
  try {
105350
- await (0, import_promises3.access)(p, import_node_fs4.constants.X_OK);
105352
+ await (0, import_promises3.access)(p, import_node_fs5.constants.X_OK);
105351
105353
  return true;
105352
105354
  } catch {
105353
105355
  return false;
@@ -105410,10 +105412,15 @@ async function reapVegaGroup(child) {
105410
105412
  }
105411
105413
  }
105412
105414
  async function collectDescendantPids(rootPid) {
105413
- const { stdout } = await execFileAsync3("ps", ["-A", "-o", "pid=,ppid="], {
105414
- timeout: 1500,
105415
- maxBuffer: 16 * 1024 * 1024
105416
- });
105415
+ let stdout;
105416
+ try {
105417
+ ({ stdout } = await execFileAsync3(PS_BIN, ["-A", "-o", "pid=,ppid="], {
105418
+ timeout: 1500,
105419
+ maxBuffer: 16 * 1024 * 1024
105420
+ }));
105421
+ } catch {
105422
+ return [];
105423
+ }
105417
105424
  const childrenByParent = /* @__PURE__ */ new Map();
105418
105425
  for (const line of stdout.split("\n")) {
105419
105426
  const m = line.trim().match(/^(\d+)\s+(\d+)$/);
@@ -105439,10 +105446,15 @@ async function collectDescendantPids(rootPid) {
105439
105446
  return descendants;
105440
105447
  }
105441
105448
  async function pgidMembers(pgid) {
105442
- const { stdout } = await execFileAsync3("ps", ["-A", "-o", "pid=,pgid="], {
105443
- timeout: 1500,
105444
- maxBuffer: 16 * 1024 * 1024
105445
- });
105449
+ let stdout;
105450
+ try {
105451
+ ({ stdout } = await execFileAsync3(PS_BIN, ["-A", "-o", "pid=,pgid="], {
105452
+ timeout: 1500,
105453
+ maxBuffer: 16 * 1024 * 1024
105454
+ }));
105455
+ } catch {
105456
+ return [];
105457
+ }
105446
105458
  const members = [];
105447
105459
  for (const line of stdout.split("\n")) {
105448
105460
  const m = line.trim().match(/^(\d+)\s+(\d+)$/);
@@ -105467,7 +105479,7 @@ async function reapLingeringGroupMembers(pid) {
105467
105479
  } catch {
105468
105480
  }
105469
105481
  }
105470
- function resolveSpawnCwd(getCwd = () => process.cwd(), dirExists = import_node_fs4.existsSync, fallback = (0, import_node_os3.tmpdir)()) {
105482
+ function resolveSpawnCwd(getCwd = () => process.cwd(), dirExists = import_node_fs5.existsSync, fallback = (0, import_node_os3.tmpdir)()) {
105471
105483
  try {
105472
105484
  const cwd = getCwd();
105473
105485
  if (dirExists(cwd)) return cwd;
@@ -105758,7 +105770,7 @@ function toSimulatorNetworkError(toolLabel, err, apiUrl, fallbackHint) {
105758
105770
  }
105759
105771
 
105760
105772
  // ../tool-server/src/utils/update-checker.ts
105761
- var import_node_fs5 = __toESM(require("node:fs"));
105773
+ var import_node_fs6 = __toESM(require("node:fs"));
105762
105774
  var import_node_os4 = __toESM(require("node:os"));
105763
105775
  var import_node_path4 = __toESM(require("node:path"));
105764
105776
  var import_semver = __toESM(require_semver2());
@@ -105776,7 +105788,7 @@ function getSuppressionFilePath() {
105776
105788
  }
105777
105789
  function loadSuppressUntil() {
105778
105790
  try {
105779
- const raw = import_node_fs5.default.readFileSync(getSuppressionFilePath(), "utf8");
105791
+ const raw = import_node_fs6.default.readFileSync(getSuppressionFilePath(), "utf8");
105780
105792
  const parsed = JSON.parse(raw);
105781
105793
  const value = parsed.suppressUntil;
105782
105794
  return typeof value === "number" && Number.isFinite(value) ? value : 0;
@@ -105786,8 +105798,8 @@ function loadSuppressUntil() {
105786
105798
  }
105787
105799
  function persistSuppressUntil(value) {
105788
105800
  const filePath = getSuppressionFilePath();
105789
- import_node_fs5.default.mkdirSync(import_node_path4.default.dirname(filePath), { recursive: true });
105790
- import_node_fs5.default.writeFileSync(filePath, JSON.stringify({ suppressUntil: value }));
105801
+ import_node_fs6.default.mkdirSync(import_node_path4.default.dirname(filePath), { recursive: true });
105802
+ import_node_fs6.default.writeFileSync(filePath, JSON.stringify({ suppressUntil: value }));
105791
105803
  }
105792
105804
  var state2 = {
105793
105805
  updateAvailable: false,
@@ -105879,7 +105891,7 @@ ACTION REQUIRED: Save a note (via TODO, task list) that an Argent update to v${l
105879
105891
  }
105880
105892
 
105881
105893
  // ../tool-server/src/preview.ts
105882
- var import_node_fs8 = __toESM(require("node:fs"));
105894
+ var import_node_fs9 = __toESM(require("node:fs"));
105883
105895
  var import_node_os6 = __toESM(require("node:os"));
105884
105896
  var import_node_path6 = __toESM(require("node:path"));
105885
105897
  var import_express = __toESM(require_express2());
@@ -105904,6 +105916,7 @@ var import_node_util8 = require("node:util");
105904
105916
 
105905
105917
  // ../tool-server/src/utils/simctl-config.ts
105906
105918
  var SIMCTL_SPAWN_TIMEOUT_MS = 1e4;
105919
+ var SIMCTL_KILL_SIGNAL = "SIGKILL";
105907
105920
 
105908
105921
  // ../tool-server/src/utils/ios-devices.ts
105909
105922
  var import_node_child_process6 = require("node:child_process");
@@ -105912,7 +105925,8 @@ var execFileAsync5 = (0, import_node_util5.promisify)(import_node_child_process6
105912
105925
  async function listIosSimulators() {
105913
105926
  try {
105914
105927
  const { stdout } = await execFileAsync5("xcrun", ["simctl", "list", "devices", "--json"], {
105915
- timeout: 1e4
105928
+ timeout: 1e4,
105929
+ killSignal: SIMCTL_KILL_SIGNAL
105916
105930
  });
105917
105931
  const data = JSON.parse(stdout);
105918
105932
  const out = [];
@@ -105974,7 +105988,7 @@ async function ensureAutomationEnabled(udid) {
105974
105988
  "-bool",
105975
105989
  "true"
105976
105990
  ],
105977
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
105991
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
105978
105992
  );
105979
105993
  }
105980
105994
  async function isEntitlementBypassActive(udid) {
@@ -105989,7 +106003,7 @@ async function isEntitlementBypassActive(udid) {
105989
106003
  "com.apple.Accessibility",
105990
106004
  "IgnoreAXServerEntitlements"
105991
106005
  ],
105992
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106006
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
105993
106007
  ).then(({ stdout }) => stdout.trim() === "1").catch(() => false);
105994
106008
  }
105995
106009
  function accessibilityPlistPath(udid) {
@@ -106224,7 +106238,7 @@ async function ensureAccessibilityEnabled(udid) {
106224
106238
  "-bool",
106225
106239
  "true"
106226
106240
  ],
106227
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106241
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
106228
106242
  )
106229
106243
  )
106230
106244
  );
@@ -106234,7 +106248,7 @@ async function setupNativeDevtoolsEnvLocal(udid, endpoint) {
106234
106248
  const result = await execFileAsync8(
106235
106249
  "xcrun",
106236
106250
  ["simctl", "spawn", udid, "launchctl", "getenv", "DYLD_INSERT_LIBRARIES"],
106237
- { encoding: "utf8", timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106251
+ { encoding: "utf8", timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
106238
106252
  ).catch((e) => ({ stdout: e.stdout ?? "" }));
106239
106253
  const existing = (result.stdout ?? "").trim();
106240
106254
  const updated = buildDyldInsertLibraries(existing, bootstrapPath);
@@ -106242,7 +106256,7 @@ async function setupNativeDevtoolsEnvLocal(udid, endpoint) {
106242
106256
  await execFileAsync8(
106243
106257
  "xcrun",
106244
106258
  ["simctl", "spawn", udid, "launchctl", "setenv", "DYLD_INSERT_LIBRARIES", updated],
106245
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106259
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
106246
106260
  );
106247
106261
  }
106248
106262
  if (endpoint.transport === "tcp") {
@@ -106260,7 +106274,7 @@ async function setupNativeDevtoolsEnvLocal(udid, endpoint) {
106260
106274
  "NATIVE_DEVTOOLS_IOS_CDP_PORT",
106261
106275
  String(endpoint.port)
106262
106276
  ],
106263
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106277
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
106264
106278
  );
106265
106279
  } else {
106266
106280
  await execFileAsync8(
@@ -106274,7 +106288,7 @@ async function setupNativeDevtoolsEnvLocal(udid, endpoint) {
106274
106288
  "NATIVE_DEVTOOLS_IOS_CDP_SOCKET",
106275
106289
  endpoint.socketPath
106276
106290
  ],
106277
- { timeout: SIMCTL_SPAWN_TIMEOUT_MS }
106291
+ { timeout: SIMCTL_SPAWN_TIMEOUT_MS, killSignal: SIMCTL_KILL_SIGNAL }
106278
106292
  );
106279
106293
  }
106280
106294
  await ensureAccessibilityEnabled(udid);
@@ -106304,7 +106318,9 @@ function parseUIKitApplicationBundleIds(stdout) {
106304
106318
  }
106305
106319
  async function listRunningUIKitApplicationBundleIds(udid) {
106306
106320
  const { stdout } = await execFileAsync8("xcrun", ["simctl", "spawn", udid, "launchctl", "list"], {
106307
- encoding: "utf8"
106321
+ encoding: "utf8",
106322
+ timeout: SIMCTL_SPAWN_TIMEOUT_MS,
106323
+ killSignal: SIMCTL_KILL_SIGNAL
106308
106324
  });
106309
106325
  return parseUIKitApplicationBundleIds(stdout);
106310
106326
  }
@@ -115922,7 +115938,7 @@ init_src();
115922
115938
 
115923
115939
  // ../tool-server/src/utils/vega-sdk.ts
115924
115940
  var import_promises4 = require("node:fs/promises");
115925
- var import_node_fs6 = require("node:fs");
115941
+ var import_node_fs7 = require("node:fs");
115926
115942
  var import_node_os5 = require("node:os");
115927
115943
  var import_node_path5 = require("node:path");
115928
115944
  var import_semver2 = __toESM(require_semver2());
@@ -115945,7 +115961,7 @@ function sdkComponentRoots(config2) {
115945
115961
  return Array.from(new Set(roots));
115946
115962
  }
115947
115963
  async function resolveVersion(channelDir, preferred) {
115948
- if (preferred && (0, import_node_fs6.existsSync)((0, import_node_path5.join)(channelDir, preferred))) return preferred;
115964
+ if (preferred && (0, import_node_fs7.existsSync)((0, import_node_path5.join)(channelDir, preferred))) return preferred;
115949
115965
  try {
115950
115966
  const versions = (await (0, import_promises4.readdir)(channelDir)).filter((e) => import_semver2.default.valid(e)).sort(import_semver2.default.rcompare);
115951
115967
  return versions[0] ?? null;
@@ -115963,7 +115979,7 @@ async function resolveVegaSdkImagesDir() {
115963
115979
  const version4 = await resolveVersion(channelDir, preferred);
115964
115980
  if (!version4) continue;
115965
115981
  const imagesDir = (0, import_node_path5.join)(channelDir, version4, "vvd", "images");
115966
- if ((0, import_node_fs6.existsSync)(imagesDir)) return imagesDir;
115982
+ if ((0, import_node_fs7.existsSync)(imagesDir)) return imagesDir;
115967
115983
  }
115968
115984
  return null;
115969
115985
  }
@@ -117901,7 +117917,7 @@ var TraceProcessorUnavailableError = class _TraceProcessorUnavailableError exten
117901
117917
  };
117902
117918
 
117903
117919
  // ../native-devtools-android/src/wasm-trace-processor.ts
117904
- var import_node_fs7 = require("node:fs");
117920
+ var import_node_fs8 = require("node:fs");
117905
117921
  var import_promises5 = require("node:fs/promises");
117906
117922
  var path13 = __toESM(require("node:path"));
117907
117923
  var import_node_url2 = require("node:url");
@@ -117916,7 +117932,7 @@ function engineGlobals() {
117916
117932
  function resolveTraceProcessorAssets() {
117917
117933
  const dir = path13.join(__dirname, "..", "assets", "trace-processor");
117918
117934
  const wasmOverride = process.env.ARGENT_TRACE_PROCESSOR_WASM;
117919
- if (wasmOverride && !(0, import_node_fs7.existsSync)(wasmOverride)) {
117935
+ if (wasmOverride && !(0, import_node_fs8.existsSync)(wasmOverride)) {
117920
117936
  throw new TraceProcessorUnavailableError("wasm_path_invalid", { path: wasmOverride });
117921
117937
  }
117922
117938
  return {
@@ -118044,8 +118060,8 @@ async function createEngine() {
118044
118060
  setupWorkerScope(dir);
118045
118061
  silenceDecoderWarning();
118046
118062
  const g = engineGlobals();
118047
- g.__TP_WASM_BYTES = new Uint8Array((0, import_node_fs7.readFileSync)(wasmPath));
118048
- const src = patchGlueForNode((0, import_node_fs7.readFileSync)(gluePath, "utf8"));
118063
+ g.__TP_WASM_BYTES = new Uint8Array((0, import_node_fs8.readFileSync)(wasmPath));
118064
+ const src = patchGlueForNode((0, import_node_fs8.readFileSync)(gluePath, "utf8"));
118049
118065
  import_node_vm.default.runInThisContext(src, { filename: "engine_bundle.node.patched.js" });
118050
118066
  const bridge = g.__TP_bridge;
118051
118067
  if (!bridge) throw new Error("patched glue did not expose globalThis.__TP_bridge");
@@ -118730,7 +118746,7 @@ function findUiFile(name) {
118730
118746
  import_node_path6.default.resolve(__dirname, "..", "..", "ui", name)
118731
118747
  ];
118732
118748
  for (const p of candidates) {
118733
- if (import_node_fs8.default.existsSync(p)) return p;
118749
+ if (import_node_fs9.default.existsSync(p)) return p;
118734
118750
  }
118735
118751
  return null;
118736
118752
  }
@@ -119053,7 +119069,7 @@ data: ${JSON.stringify(data)}
119053
119069
  const roots = /* @__PURE__ */ new Set();
119054
119070
  for (const r of [import_node_os6.default.tmpdir(), process.cwd(), "/tmp"]) {
119055
119071
  try {
119056
- roots.add(import_node_fs8.default.realpathSync(r));
119072
+ roots.add(import_node_fs9.default.realpathSync(r));
119057
119073
  } catch {
119058
119074
  }
119059
119075
  }
@@ -119072,8 +119088,8 @@ data: ${JSON.stringify(data)}
119072
119088
  let real;
119073
119089
  let size;
119074
119090
  try {
119075
- real = import_node_fs8.default.realpathSync(src);
119076
- const st = import_node_fs8.default.statSync(real);
119091
+ real = import_node_fs9.default.realpathSync(src);
119092
+ const st = import_node_fs9.default.statSync(real);
119077
119093
  if (!st.isFile()) throw new Error("not a file");
119078
119094
  size = st.size;
119079
119095
  } catch {
@@ -119090,7 +119106,7 @@ data: ${JSON.stringify(data)}
119090
119106
  }
119091
119107
  res.set("Cache-Control", "no-store");
119092
119108
  res.type(mime);
119093
- import_node_fs8.default.createReadStream(real).on("error", () => {
119109
+ import_node_fs9.default.createReadStream(real).on("error", () => {
119094
119110
  if (!res.headersSent) res.status(404).end();
119095
119111
  }).pipe(res);
119096
119112
  });
@@ -119142,7 +119158,7 @@ data: ${JSON.stringify(data)}
119142
119158
  }
119143
119159
 
119144
119160
  // ../tool-server/src/artifacts.ts
119145
- var import_node_fs9 = require("node:fs");
119161
+ var import_node_fs10 = require("node:fs");
119146
119162
  var import_promises7 = require("node:fs/promises");
119147
119163
  var import_node_child_process15 = require("node:child_process");
119148
119164
 
@@ -119270,7 +119286,7 @@ function makeArtifactRoute(registry2) {
119270
119286
  res.setHeader("Content-Type", entry.mimeType);
119271
119287
  res.setHeader("Content-Disposition", `attachment; filename="${entry.filename}"`);
119272
119288
  if (entry.size > 0) res.setHeader("Content-Length", String(entry.size));
119273
- const stream = (0, import_node_fs9.createReadStream)(entry.path);
119289
+ const stream = (0, import_node_fs10.createReadStream)(entry.path);
119274
119290
  stream.on("error", () => {
119275
119291
  if (!res.headersSent) res.status(500).json({ error: `Failed to read artifact "${id}"` });
119276
119292
  else res.destroy();
@@ -119937,7 +119953,7 @@ function createHttpApp(registry2, options) {
119937
119953
  }
119938
119954
  const id = (0, import_node_crypto6.randomUUID)();
119939
119955
  const tarPath = (0, import_node_path9.join)((0, import_node_os8.tmpdir)(), `argent-upload-${id}.tar.gz`);
119940
- const ws = (0, import_node_fs10.createWriteStream)(tarPath);
119956
+ const ws = (0, import_node_fs11.createWriteStream)(tarPath);
119941
119957
  let received = 0;
119942
119958
  let released = false;
119943
119959
  const releaseInFlight = () => {
@@ -120275,15 +120291,15 @@ function createHttpApp(registry2, options) {
120275
120291
 
120276
120292
  // ../tool-server/src/event-log.ts
120277
120293
  var import_bunyan = __toESM(require_bunyan());
120278
- var import_node_fs11 = require("node:fs");
120294
+ var import_node_fs12 = require("node:fs");
120279
120295
  var import_node_path10 = require("node:path");
120280
120296
  init_src();
120281
120297
  function createToolServerEventLog({
120282
120298
  filePath
120283
120299
  }) {
120284
- (0, import_node_fs11.mkdirSync)((0, import_node_path10.dirname)(filePath), { recursive: true });
120285
- (0, import_node_fs11.writeFileSync)(filePath, "");
120286
- const fileStream = (0, import_node_fs11.createWriteStream)(filePath, { flags: "a" });
120300
+ (0, import_node_fs12.mkdirSync)((0, import_node_path10.dirname)(filePath), { recursive: true });
120301
+ (0, import_node_fs12.writeFileSync)(filePath, "");
120302
+ const fileStream = (0, import_node_fs12.createWriteStream)(filePath, { flags: "a" });
120287
120303
  let disposed = false;
120288
120304
  let disposePromise = null;
120289
120305
  let streamError = null;
@@ -139144,7 +139160,7 @@ var nativeProfilerSessionBlueprint = {
139144
139160
  var import_child_process4 = require("child_process");
139145
139161
  init_src();
139146
139162
  var import_fs9 = require("fs");
139147
- var import_node_fs12 = require("node:fs");
139163
+ var import_node_fs13 = require("node:fs");
139148
139164
  var path22 = __toESM(require("path"));
139149
139165
 
139150
139166
  // ../tool-server/src/utils/ios-profiler/notify.ts
@@ -140793,7 +140809,7 @@ function resolveDefaultTemplatePath() {
140793
140809
  )
140794
140810
  ];
140795
140811
  for (const candidate of candidates) {
140796
- if ((0, import_node_fs12.existsSync)(candidate)) return candidate;
140812
+ if ((0, import_node_fs13.existsSync)(candidate)) return candidate;
140797
140813
  }
140798
140814
  throw new FailureError(
140799
140815
  `Argent.tracetemplate not found. Looked in:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swmansion/argent",
3
- "version": "0.16.1-next.6",
3
+ "version": "0.16.1-next.8",
4
4
  "description": "MCP server for iOS Simulator and Android Emulator control",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {