@swmansion/argent 0.29.1-next.11 → 0.29.1-next.13

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.
@@ -41931,11 +41931,11 @@ var require_parse = __commonJS({
41931
41931
  segments[segments.length] = parent;
41932
41932
  }
41933
41933
  var n = key2.length;
41934
- var open3 = first;
41934
+ var open4 = first;
41935
41935
  var collected = 0;
41936
- while (open3 >= 0 && collected < options.depth) {
41936
+ while (open4 >= 0 && collected < options.depth) {
41937
41937
  var level = 1;
41938
- var i = open3 + 1;
41938
+ var i = open4 + 1;
41939
41939
  var close = -1;
41940
41940
  while (i < n && close < 0) {
41941
41941
  var cu = key2.charCodeAt(i);
@@ -41950,23 +41950,23 @@ var require_parse = __commonJS({
41950
41950
  i += 1;
41951
41951
  }
41952
41952
  if (close < 0) {
41953
- segments[segments.length] = "[" + key2.slice(open3) + "]";
41953
+ segments[segments.length] = "[" + key2.slice(open4) + "]";
41954
41954
  return segments;
41955
41955
  }
41956
- var seg = key2.slice(open3, close + 1);
41956
+ var seg = key2.slice(open4, close + 1);
41957
41957
  var content = seg.slice(1, -1);
41958
41958
  if (!options.plainObjects && has.call(Object.prototype, content) && !options.allowPrototypes) {
41959
41959
  return;
41960
41960
  }
41961
41961
  segments[segments.length] = seg;
41962
41962
  collected += 1;
41963
- open3 = key2.indexOf("[", close + 1);
41963
+ open4 = key2.indexOf("[", close + 1);
41964
41964
  }
41965
- if (open3 >= 0) {
41965
+ if (open4 >= 0) {
41966
41966
  if (options.strictDepth === true) {
41967
41967
  throw new RangeError("Input depth exceeded depth option of " + options.depth + " and strictDepth is true");
41968
41968
  }
41969
- segments[segments.length] = "[" + key2.slice(open3) + "]";
41969
+ segments[segments.length] = "[" + key2.slice(open4) + "]";
41970
41970
  }
41971
41971
  return segments;
41972
41972
  };
@@ -42474,7 +42474,7 @@ var require_view = __commonJS({
42474
42474
  var dirname19 = path53.dirname;
42475
42475
  var basename14 = path53.basename;
42476
42476
  var extname6 = path53.extname;
42477
- var join55 = path53.join;
42477
+ var join56 = path53.join;
42478
42478
  var resolve15 = path53.resolve;
42479
42479
  module2.exports = View;
42480
42480
  function View(name, options) {
@@ -42536,14 +42536,14 @@ var require_view = __commonJS({
42536
42536
  };
42537
42537
  View.prototype.resolve = function resolve16(dir, file2) {
42538
42538
  var ext = this.ext;
42539
- var path54 = join55(dir, file2);
42540
- var stat6 = tryStat(path54);
42541
- if (stat6 && stat6.isFile()) {
42539
+ var path54 = join56(dir, file2);
42540
+ var stat7 = tryStat(path54);
42541
+ if (stat7 && stat7.isFile()) {
42542
42542
  return path54;
42543
42543
  }
42544
- path54 = join55(dir, basename14(file2, ext), "index" + ext);
42545
- stat6 = tryStat(path54);
42546
- if (stat6 && stat6.isFile()) {
42544
+ path54 = join56(dir, basename14(file2, ext), "index" + ext);
42545
+ stat7 = tryStat(path54);
42546
+ if (stat7 && stat7.isFile()) {
42547
42547
  return path54;
42548
42548
  }
42549
42549
  };
@@ -42696,9 +42696,9 @@ var require_etag = __commonJS({
42696
42696
  }
42697
42697
  return obj && typeof obj === "object" && "ctime" in obj && toString.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number";
42698
42698
  }
42699
- function stattag(stat6) {
42700
- var mtime = stat6.mtime.getTime().toString(16);
42701
- var size = stat6.size.toString(16);
42699
+ function stattag(stat7) {
42700
+ var mtime = stat7.mtime.getTime().toString(16);
42701
+ var size = stat7.size.toString(16);
42702
42702
  return '"' + size + "-" + mtime + '"';
42703
42703
  }
42704
42704
  }
@@ -74865,7 +74865,7 @@ var require_send = __commonJS({
74865
74865
  var Stream2 = require("stream");
74866
74866
  var util = require("util");
74867
74867
  var extname6 = path53.extname;
74868
- var join55 = path53.join;
74868
+ var join56 = path53.join;
74869
74869
  var normalize = path53.normalize;
74870
74870
  var resolve15 = path53.resolve;
74871
74871
  var sep5 = path53.sep;
@@ -75037,7 +75037,7 @@ var require_send = __commonJS({
75037
75037
  return res;
75038
75038
  }
75039
75039
  parts2 = path54.split(sep5);
75040
- path54 = normalize(join55(root, path54));
75040
+ path54 = normalize(join56(root, path54));
75041
75041
  } else {
75042
75042
  if (UP_PATH_REGEXP.test(path54)) {
75043
75043
  debug('malicious path "%s"', path54);
@@ -75068,8 +75068,8 @@ var require_send = __commonJS({
75068
75068
  this.sendFile(path54);
75069
75069
  return res;
75070
75070
  };
75071
- SendStream.prototype.send = function send2(path54, stat6) {
75072
- var len = stat6.size;
75071
+ SendStream.prototype.send = function send2(path54, stat7) {
75072
+ var len = stat7.size;
75073
75073
  var options = this.options;
75074
75074
  var opts = {};
75075
75075
  var res = this.res;
@@ -75081,7 +75081,7 @@ var require_send = __commonJS({
75081
75081
  return;
75082
75082
  }
75083
75083
  debug('pipe "%s"', path54);
75084
- this.setHeader(path54, stat6);
75084
+ this.setHeader(path54, stat7);
75085
75085
  this.type(path54);
75086
75086
  if (this.isConditionalGET()) {
75087
75087
  if (this.isPreconditionFailure()) {
@@ -75137,16 +75137,16 @@ var require_send = __commonJS({
75137
75137
  var i = 0;
75138
75138
  var self2 = this;
75139
75139
  debug('stat "%s"', path54);
75140
- fs69.stat(path54, function onstat(err, stat6) {
75140
+ fs69.stat(path54, function onstat(err, stat7) {
75141
75141
  var pathEndsWithSep = path54[path54.length - 1] === sep5;
75142
75142
  if (err && err.code === "ENOENT" && !extname6(path54) && !pathEndsWithSep) {
75143
75143
  return next(err);
75144
75144
  }
75145
75145
  if (err) return self2.onStatError(err);
75146
- if (stat6.isDirectory()) return self2.redirect(path54);
75146
+ if (stat7.isDirectory()) return self2.redirect(path54);
75147
75147
  if (pathEndsWithSep) return self2.error(404);
75148
- self2.emit("file", path54, stat6);
75149
- self2.send(path54, stat6);
75148
+ self2.emit("file", path54, stat7);
75149
+ self2.send(path54, stat7);
75150
75150
  });
75151
75151
  function next(err) {
75152
75152
  if (self2._extensions.length <= i) {
@@ -75154,11 +75154,11 @@ var require_send = __commonJS({
75154
75154
  }
75155
75155
  var p = path54 + "." + self2._extensions[i++];
75156
75156
  debug('stat "%s"', p);
75157
- fs69.stat(p, function(err2, stat6) {
75157
+ fs69.stat(p, function(err2, stat7) {
75158
75158
  if (err2) return next(err2);
75159
- if (stat6.isDirectory()) return next();
75160
- self2.emit("file", p, stat6);
75161
- self2.send(p, stat6);
75159
+ if (stat7.isDirectory()) return next();
75160
+ self2.emit("file", p, stat7);
75161
+ self2.send(p, stat7);
75162
75162
  });
75163
75163
  }
75164
75164
  };
@@ -75170,13 +75170,13 @@ var require_send = __commonJS({
75170
75170
  if (err) return self2.onStatError(err);
75171
75171
  return self2.error(404);
75172
75172
  }
75173
- var p = join55(path54, self2._index[i]);
75173
+ var p = join56(path54, self2._index[i]);
75174
75174
  debug('stat "%s"', p);
75175
- fs69.stat(p, function(err2, stat6) {
75175
+ fs69.stat(p, function(err2, stat7) {
75176
75176
  if (err2) return next(err2);
75177
- if (stat6.isDirectory()) return next();
75178
- self2.emit("file", p, stat6);
75179
- self2.send(p, stat6);
75177
+ if (stat7.isDirectory()) return next();
75178
+ self2.emit("file", p, stat7);
75179
+ self2.send(p, stat7);
75180
75180
  });
75181
75181
  }
75182
75182
  next();
@@ -75207,9 +75207,9 @@ var require_send = __commonJS({
75207
75207
  debug("content-type %s", type2);
75208
75208
  res.setHeader("Content-Type", type2);
75209
75209
  };
75210
- SendStream.prototype.setHeader = function setHeader(path54, stat6) {
75210
+ SendStream.prototype.setHeader = function setHeader(path54, stat7) {
75211
75211
  var res = this.res;
75212
- this.emit("headers", res, path54, stat6);
75212
+ this.emit("headers", res, path54, stat7);
75213
75213
  if (this._acceptRanges && !res.getHeader("Accept-Ranges")) {
75214
75214
  debug("accept ranges");
75215
75215
  res.setHeader("Accept-Ranges", "bytes");
@@ -75223,12 +75223,12 @@ var require_send = __commonJS({
75223
75223
  res.setHeader("Cache-Control", cacheControl);
75224
75224
  }
75225
75225
  if (this._lastModified && !res.getHeader("Last-Modified")) {
75226
- var modified = stat6.mtime.toUTCString();
75226
+ var modified = stat7.mtime.toUTCString();
75227
75227
  debug("modified %s", modified);
75228
75228
  res.setHeader("Last-Modified", modified);
75229
75229
  }
75230
75230
  if (this._etag && !res.getHeader("ETag")) {
75231
- var val = etag(stat6);
75231
+ var val = etag(stat7);
75232
75232
  debug("etag %s", val);
75233
75233
  res.setHeader("ETag", val);
75234
75234
  }
@@ -82265,7 +82265,7 @@ var require_stream = __commonJS({
82265
82265
  };
82266
82266
  duplex._final = function(callback) {
82267
82267
  if (ws.readyState === ws.CONNECTING) {
82268
- ws.once("open", function open3() {
82268
+ ws.once("open", function open4() {
82269
82269
  duplex._final(callback);
82270
82270
  });
82271
82271
  return;
@@ -82286,7 +82286,7 @@ var require_stream = __commonJS({
82286
82286
  };
82287
82287
  duplex._write = function(chunk, encoding, callback) {
82288
82288
  if (ws.readyState === ws.CONNECTING) {
82289
- ws.once("open", function open3() {
82289
+ ws.once("open", function open4() {
82290
82290
  duplex._write(chunk, encoding, callback);
82291
82291
  });
82292
82292
  return;
@@ -83355,14 +83355,14 @@ async function resolveAvdPath(avdName) {
83355
83355
  return null;
83356
83356
  }
83357
83357
  async function hasDefaultBootSnapshot(avdName) {
83358
- const { stat: stat6 } = await import("node:fs/promises");
83358
+ const { stat: stat7 } = await import("node:fs/promises");
83359
83359
  const avdPath = await resolveAvdPath(avdName);
83360
83360
  if (!avdPath) return false;
83361
83361
  const snapshotPath = `${avdPath}/snapshots/default_boot`;
83362
83362
  try {
83363
83363
  const [metaStat, ramStat] = await Promise.all([
83364
- stat6(`${snapshotPath}/snapshot.pb`),
83365
- stat6(`${snapshotPath}/ram.bin`)
83364
+ stat7(`${snapshotPath}/snapshot.pb`),
83365
+ stat7(`${snapshotPath}/ram.bin`)
83366
83366
  ]);
83367
83367
  if (!metaStat.isFile()) return false;
83368
83368
  if (!ramStat.isFile() || ramStat.size === 0) return false;
@@ -83503,14 +83503,14 @@ var require_ncp = __commonJS({
83503
83503
  return getStats(source2);
83504
83504
  }
83505
83505
  function getStats(source2) {
83506
- var stat6 = dereference ? fs69.stat : fs69.lstat;
83506
+ var stat7 = dereference ? fs69.stat : fs69.lstat;
83507
83507
  if (running >= limit) {
83508
83508
  return setImmediate(function() {
83509
83509
  getStats(source2);
83510
83510
  });
83511
83511
  }
83512
83512
  running++;
83513
- stat6(source2, function(err, stats) {
83513
+ stat7(source2, function(err, stats) {
83514
83514
  var item = {};
83515
83515
  if (err) {
83516
83516
  return onError(err);
@@ -83543,8 +83543,8 @@ var require_ncp = __commonJS({
83543
83543
  });
83544
83544
  }
83545
83545
  if (modified) {
83546
- var stat6 = dereference ? fs69.stat : fs69.lstat;
83547
- stat6(target, function(err, stats) {
83546
+ var stat7 = dereference ? fs69.stat : fs69.lstat;
83547
+ stat7(target, function(err, stats) {
83548
83548
  if (file2.mtime.getTime() > stats.mtime.getTime())
83549
83549
  copyFile(file2, target);
83550
83550
  else return cb();
@@ -84961,7 +84961,7 @@ var require_sync = __commonJS({
84961
84961
  return this._readdir(abs, false);
84962
84962
  var entries;
84963
84963
  var lstat;
84964
- var stat6;
84964
+ var stat7;
84965
84965
  try {
84966
84966
  lstat = fs69.lstatSync(abs);
84967
84967
  } catch (er) {
@@ -85087,8 +85087,8 @@ var require_sync = __commonJS({
85087
85087
  return false;
85088
85088
  }
85089
85089
  var exists2;
85090
- var stat6 = this.statCache[abs];
85091
- if (!stat6) {
85090
+ var stat7 = this.statCache[abs];
85091
+ if (!stat7) {
85092
85092
  var lstat;
85093
85093
  try {
85094
85094
  lstat = fs69.lstatSync(abs);
@@ -85097,16 +85097,16 @@ var require_sync = __commonJS({
85097
85097
  }
85098
85098
  if (lstat.isSymbolicLink()) {
85099
85099
  try {
85100
- stat6 = fs69.statSync(abs);
85100
+ stat7 = fs69.statSync(abs);
85101
85101
  } catch (er) {
85102
- stat6 = lstat;
85102
+ stat7 = lstat;
85103
85103
  }
85104
85104
  } else {
85105
- stat6 = lstat;
85105
+ stat7 = lstat;
85106
85106
  }
85107
85107
  }
85108
- this.statCache[abs] = stat6;
85109
- var c = stat6.isDirectory() ? "DIR" : "FILE";
85108
+ this.statCache[abs] = stat7;
85109
+ var c = stat7.isDirectory() ? "DIR" : "FILE";
85110
85110
  this.cache[abs] = this.cache[abs] || c;
85111
85111
  if (needDir && c !== "DIR")
85112
85112
  return false;
@@ -85655,16 +85655,16 @@ var require_glob = __commonJS({
85655
85655
  return cb();
85656
85656
  }
85657
85657
  var exists2;
85658
- var stat6 = this.statCache[abs];
85659
- if (stat6 !== void 0) {
85660
- if (stat6 === false)
85661
- return cb(null, stat6);
85658
+ var stat7 = this.statCache[abs];
85659
+ if (stat7 !== void 0) {
85660
+ if (stat7 === false)
85661
+ return cb(null, stat7);
85662
85662
  else {
85663
- var type = stat6.isDirectory() ? "DIR" : "FILE";
85663
+ var type = stat7.isDirectory() ? "DIR" : "FILE";
85664
85664
  if (needDir && type === "FILE")
85665
85665
  return cb();
85666
85666
  else
85667
- return cb(null, type, stat6);
85667
+ return cb(null, type, stat7);
85668
85668
  }
85669
85669
  }
85670
85670
  var self2 = this;
@@ -85673,31 +85673,31 @@ var require_glob = __commonJS({
85673
85673
  fs69.lstat(abs, statcb);
85674
85674
  function lstatcb_(er, lstat) {
85675
85675
  if (lstat && lstat.isSymbolicLink()) {
85676
- return fs69.stat(abs, function(er2, stat7) {
85676
+ return fs69.stat(abs, function(er2, stat8) {
85677
85677
  if (er2)
85678
85678
  self2._stat2(f, abs, null, lstat, cb);
85679
85679
  else
85680
- self2._stat2(f, abs, er2, stat7, cb);
85680
+ self2._stat2(f, abs, er2, stat8, cb);
85681
85681
  });
85682
85682
  } else {
85683
85683
  self2._stat2(f, abs, er, lstat, cb);
85684
85684
  }
85685
85685
  }
85686
85686
  };
85687
- Glob.prototype._stat2 = function(f, abs, er, stat6, cb) {
85687
+ Glob.prototype._stat2 = function(f, abs, er, stat7, cb) {
85688
85688
  if (er) {
85689
85689
  this.statCache[abs] = false;
85690
85690
  return cb();
85691
85691
  }
85692
85692
  var needDir = f.slice(-1) === "/";
85693
- this.statCache[abs] = stat6;
85694
- if (abs.slice(-1) === "/" && !stat6.isDirectory())
85695
- return cb(null, false, stat6);
85696
- var c = stat6.isDirectory() ? "DIR" : "FILE";
85693
+ this.statCache[abs] = stat7;
85694
+ if (abs.slice(-1) === "/" && !stat7.isDirectory())
85695
+ return cb(null, false, stat7);
85696
+ var c = stat7.isDirectory() ? "DIR" : "FILE";
85697
85697
  this.cache[abs] = this.cache[abs] || c;
85698
85698
  if (needDir && c !== "DIR")
85699
85699
  return cb();
85700
- return cb(null, c, stat6);
85700
+ return cb(null, c, stat7);
85701
85701
  };
85702
85702
  }
85703
85703
  });
@@ -85753,7 +85753,7 @@ var require_rimraf = __commonJS({
85753
85753
  var n = 0;
85754
85754
  if (options.disableGlob || !glob.hasMagic(p))
85755
85755
  return afterGlob(null, [p]);
85756
- fs69.lstat(p, function(er, stat6) {
85756
+ fs69.lstat(p, function(er, stat7) {
85757
85757
  if (!er)
85758
85758
  return afterGlob(null, [p]);
85759
85759
  glob(p, globOpts, afterGlob);
@@ -86010,8 +86010,8 @@ var require_mkdirp = __commonJS({
86010
86010
  // there already. If so, then hooray! If not, then something
86011
86011
  // is borked.
86012
86012
  default:
86013
- xfs.stat(p, function(er2, stat6) {
86014
- if (er2 || !stat6.isDirectory()) cb(er, made);
86013
+ xfs.stat(p, function(er2, stat7) {
86014
+ if (er2 || !stat7.isDirectory()) cb(er, made);
86015
86015
  else cb(null, made);
86016
86016
  });
86017
86017
  break;
@@ -86042,13 +86042,13 @@ var require_mkdirp = __commonJS({
86042
86042
  // there already. If so, then hooray! If not, then something
86043
86043
  // is borked.
86044
86044
  default:
86045
- var stat6;
86045
+ var stat7;
86046
86046
  try {
86047
- stat6 = xfs.statSync(p);
86047
+ stat7 = xfs.statSync(p);
86048
86048
  } catch (err1) {
86049
86049
  throw err0;
86050
86050
  }
86051
- if (!stat6.isDirectory()) throw err0;
86051
+ if (!stat7.isDirectory()) throw err0;
86052
86052
  break;
86053
86053
  }
86054
86054
  }
@@ -100257,7 +100257,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
100257
100257
  var SESSION_ID = (0, import_node_crypto3.randomUUID)();
100258
100258
  function readCliVersion() {
100259
100259
  if (true) {
100260
- return "0.29.1-next.10";
100260
+ return "0.29.1-next.13";
100261
100261
  }
100262
100262
  return "0.0.0";
100263
100263
  }
@@ -106647,9 +106647,9 @@ var Writer = class _Writer {
106647
106647
  */
106648
106648
  static async tryOpen(quic, options) {
106649
106649
  const cancelled = options.cancel.then(() => void 0, () => void 0);
106650
- const open3 = _Writer.open(quic, options);
106650
+ const open4 = _Writer.open(quic, options);
106651
106651
  try {
106652
- const stream = await Promise.race([cancelled, open3]);
106652
+ const stream = await Promise.race([cancelled, open4]);
106653
106653
  if (stream)
106654
106654
  return stream;
106655
106655
  } catch (err) {
@@ -106658,7 +106658,7 @@ var Writer = class _Writer {
106658
106658
  return void 0;
106659
106659
  }
106660
106660
  const abandoned = new Error("abandoned waiting for a stream slot");
106661
- open3.then((w) => w.reset(abandoned)).catch(() => void 0);
106661
+ open4.then((w) => w.reset(abandoned)).catch(() => void 0);
106662
106662
  return void 0;
106663
106663
  }
106664
106664
  };
@@ -124229,7 +124229,7 @@ function createTabsManager(deps) {
124229
124229
  });
124230
124230
  }
124231
124231
  }
124232
- async function open3(opts) {
124232
+ async function open4(opts) {
124233
124233
  const url2 = opts?.url ?? "about:blank";
124234
124234
  const created = await withBrowserClient(async (browser) => {
124235
124235
  let out;
@@ -124293,7 +124293,7 @@ function createTabsManager(deps) {
124293
124293
  return {
124294
124294
  list,
124295
124295
  select,
124296
- open: open3,
124296
+ open: open4,
124297
124297
  close,
124298
124298
  activeTargetId: () => activeTargetId
124299
124299
  };
@@ -135009,8 +135009,8 @@ function resolveLauncher(appPath) {
135009
135009
  error_kind: "validation"
135010
135010
  });
135011
135011
  }
135012
- const stat6 = fs33.statSync(abs);
135013
- if (stat6.isDirectory()) {
135012
+ const stat7 = fs33.statSync(abs);
135013
+ if (stat7.isDirectory()) {
135014
135014
  if (abs.endsWith(".app")) {
135015
135015
  const macOsDir = path28.join(abs, "Contents", "MacOS");
135016
135016
  if (!fs33.existsSync(macOsDir)) {
@@ -136853,23 +136853,186 @@ Succeeds when the app is not running or not installed.`,
136853
136853
  init_zod();
136854
136854
 
136855
136855
  // ../tool-server/src/tools/reinstall-app/platforms/ios.ts
136856
+ var import_node_child_process30 = require("node:child_process");
136857
+ var import_node_util23 = require("node:util");
136858
+ var import_node_path17 = require("node:path");
136859
+ init_src2();
136860
+
136861
+ // ../tool-server/src/tools/reinstall-app/validate-app.ts
136856
136862
  var import_node_child_process29 = require("node:child_process");
136857
- var import_node_util22 = require("node:util");
136863
+ var import_promises11 = require("node:fs/promises");
136858
136864
  var import_node_path16 = require("node:path");
136859
- init_src2();
136865
+ var import_node_util22 = require("node:util");
136866
+
136867
+ // ../tool-server/src/utils/apk-package.ts
136868
+ var import_promises10 = require("node:fs/promises");
136869
+ var import_node_zlib = require("node:zlib");
136870
+ async function readApkPackageName(apkPath) {
136871
+ return parseManifestPackage(await readZipEntry(apkPath, "AndroidManifest.xml"));
136872
+ }
136873
+ async function readZipEntry(zipPath, entryName) {
136874
+ const file2 = await (0, import_promises10.open)(zipPath, "r");
136875
+ try {
136876
+ const read = async (position, length) => {
136877
+ const buf = Buffer.alloc(length);
136878
+ const { bytesRead } = await file2.read(buf, 0, length, position);
136879
+ return buf.subarray(0, bytesRead);
136880
+ };
136881
+ const { size } = await file2.stat();
136882
+ const tailStart = Math.max(0, size - (22 + 65535));
136883
+ const tail = await read(tailStart, size - tailStart);
136884
+ const eocd = tail.lastIndexOf(Buffer.from([80, 75, 5, 6]));
136885
+ if (eocd < 0) throw new Error("not a zip archive");
136886
+ const entryCount = tail.readUInt16LE(eocd + 10);
136887
+ const dir = await read(tail.readUInt32LE(eocd + 16), tail.readUInt32LE(eocd + 12));
136888
+ let p = 0;
136889
+ for (let i = 0; i < entryCount && dir.readUInt32LE(p) === 33639248; i++) {
136890
+ const method = dir.readUInt16LE(p + 10);
136891
+ const compressedSize = dir.readUInt32LE(p + 20);
136892
+ const nameLength = dir.readUInt16LE(p + 28);
136893
+ const nextEntry = p + 46 + nameLength + dir.readUInt16LE(p + 30) + dir.readUInt16LE(p + 32);
136894
+ if (dir.toString("utf8", p + 46, p + 46 + nameLength) === entryName) {
136895
+ const localOffset = dir.readUInt32LE(p + 42);
136896
+ const local = await read(localOffset, 30);
136897
+ const dataStart = localOffset + 30 + local.readUInt16LE(26) + local.readUInt16LE(28);
136898
+ const data = await read(dataStart, compressedSize);
136899
+ if (method === 0) return data;
136900
+ if (method === 8) return (0, import_node_zlib.inflateRawSync)(data);
136901
+ throw new Error(`unsupported zip compression method ${method}`);
136902
+ }
136903
+ p = nextEntry;
136904
+ }
136905
+ throw new Error(`no ${entryName} in the archive`);
136906
+ } finally {
136907
+ await file2.close();
136908
+ }
136909
+ }
136910
+ var RES_STRING_POOL_TYPE = 1;
136911
+ var RES_XML_START_ELEMENT_TYPE = 258;
136912
+ var UTF8_FLAG = 1 << 8;
136913
+ function parseManifestPackage(xml) {
136914
+ let strings = [];
136915
+ for (let p = xml.readUInt16LE(2); p + 8 <= xml.length; ) {
136916
+ const type = xml.readUInt16LE(p);
136917
+ const chunkSize = xml.readUInt32LE(p + 4);
136918
+ if (chunkSize < 8) break;
136919
+ if (type === RES_STRING_POOL_TYPE) {
136920
+ strings = readStringPool(xml, p);
136921
+ } else if (type === RES_XML_START_ELEMENT_TYPE) {
136922
+ const ext = p + xml.readUInt16LE(p + 2);
136923
+ const attrStart = ext + xml.readUInt16LE(ext + 8);
136924
+ const attrSize = xml.readUInt16LE(ext + 10);
136925
+ const attrCount = xml.readUInt16LE(ext + 12);
136926
+ for (let i = 0; i < attrCount; i++) {
136927
+ const attr2 = attrStart + i * attrSize;
136928
+ if (strings[xml.readUInt32LE(attr2 + 4)] === "package") {
136929
+ const value = strings[xml.readUInt32LE(attr2 + 8)];
136930
+ if (value) return value;
136931
+ }
136932
+ }
136933
+ break;
136934
+ }
136935
+ p += chunkSize;
136936
+ }
136937
+ throw new Error("no package attribute in AndroidManifest.xml");
136938
+ }
136939
+ function readStringPool(xml, chunk) {
136940
+ const count2 = xml.readUInt32LE(chunk + 8);
136941
+ const utf8 = (xml.readUInt32LE(chunk + 16) & UTF8_FLAG) !== 0;
136942
+ const stringsStart = chunk + xml.readUInt32LE(chunk + 20);
136943
+ const offsets = chunk + xml.readUInt16LE(chunk + 2);
136944
+ const out = [];
136945
+ for (let i = 0; i < count2; i++) {
136946
+ let p = stringsStart + xml.readUInt32LE(offsets + i * 4);
136947
+ if (utf8) {
136948
+ p += xml[p] & 128 ? 2 : 1;
136949
+ const len = xml[p] & 128 ? (xml[p] & 127) << 8 | xml[p + 1] : xml[p];
136950
+ p += xml[p] & 128 ? 2 : 1;
136951
+ out.push(xml.toString("utf8", p, p + len));
136952
+ } else {
136953
+ const head = xml.readUInt16LE(p);
136954
+ const len = head & 32768 ? (head & 32767) << 16 | xml.readUInt16LE(p + 2) : head;
136955
+ p += head & 32768 ? 4 : 2;
136956
+ out.push(xml.toString("utf16le", p, p + len * 2));
136957
+ }
136958
+ }
136959
+ return out;
136960
+ }
136961
+
136962
+ // ../tool-server/src/tools/reinstall-app/validate-app.ts
136860
136963
  var execFileAsync22 = (0, import_node_util22.promisify)(import_node_child_process29.execFile);
136964
+ async function requirePath(absolute, kind, what) {
136965
+ const info = await (0, import_promises11.stat)(absolute).catch(() => null);
136966
+ if (!info) {
136967
+ throw new InvalidToolInputError(`appPath ${absolute} does not exist. Nothing was uninstalled.`);
136968
+ }
136969
+ if (kind === "directory" ? !info.isDirectory() : !info.isFile()) {
136970
+ throw new InvalidToolInputError(`appPath ${absolute} is not ${what}. Nothing was uninstalled.`);
136971
+ }
136972
+ }
136973
+ function mismatch(bundleId, absolute, actual) {
136974
+ return new InvalidToolInputError(
136975
+ `bundleId ${bundleId} does not match the app at ${absolute}, which is ${actual}. Pass bundleId ${actual}, or the path of the ${bundleId} build. Nothing was uninstalled.`
136976
+ );
136977
+ }
136978
+ async function assertIosAppBundle(absolute, bundleId, { readBundleId = true } = {}) {
136979
+ await requirePath(absolute, "directory", "an .app bundle directory");
136980
+ const infoPlist = (0, import_node_path16.join)(absolute, "Info.plist");
136981
+ if (!(await (0, import_promises11.stat)(infoPlist).catch(() => null))?.isFile()) {
136982
+ throw new InvalidToolInputError(
136983
+ `appPath ${absolute} has no Info.plist, so it is not an iOS .app bundle. Nothing was uninstalled.`
136984
+ );
136985
+ }
136986
+ if (!readBundleId) return;
136987
+ const actual = await execFileAsync22("plutil", [
136988
+ "-extract",
136989
+ "CFBundleIdentifier",
136990
+ "raw",
136991
+ "-o",
136992
+ "-",
136993
+ infoPlist
136994
+ ]).then(
136995
+ ({ stdout }) => stdout.trim(),
136996
+ () => ""
136997
+ );
136998
+ if (!actual) {
136999
+ throw new InvalidToolInputError(
137000
+ `${infoPlist} has no CFBundleIdentifier, so it is not an iOS .app bundle. Nothing was uninstalled.`
137001
+ );
137002
+ }
137003
+ if (actual !== bundleId) throw mismatch(bundleId, absolute, actual);
137004
+ }
137005
+ async function assertApk(absolute, packageName) {
137006
+ await requirePath(absolute, "file", "an .apk file");
137007
+ let actual;
137008
+ try {
137009
+ actual = await readApkPackageName(absolute);
137010
+ } catch (err) {
137011
+ throw new InvalidToolInputError(
137012
+ `appPath ${absolute} is not a readable APK (${err.message}). Nothing was uninstalled.`
137013
+ );
137014
+ }
137015
+ if (actual !== packageName) throw mismatch(packageName, absolute, actual);
137016
+ }
137017
+ async function assertVpkg(absolute) {
137018
+ await requirePath(absolute, "file", "a .vpkg file");
137019
+ }
137020
+
137021
+ // ../tool-server/src/tools/reinstall-app/platforms/ios.ts
137022
+ var execFileAsync23 = (0, import_node_util23.promisify)(import_node_child_process30.execFile);
136861
137023
  var iosImpl = {
136862
137024
  requires: ["xcrun"],
136863
137025
  handler: async (_services, params) => {
136864
137026
  const { udid, bundleId, appPath } = params;
136865
- const absolute = (0, import_node_path16.resolve)(appPath);
137027
+ const absolute = (0, import_node_path17.resolve)(appPath);
137028
+ await assertIosAppBundle(absolute, bundleId);
136866
137029
  const { nativeId, prefix } = await simctlTargetForUdid(udid);
136867
137030
  try {
136868
- await execFileAsync22("xcrun", [...prefix, "uninstall", nativeId, bundleId]);
137031
+ await execFileAsync23("xcrun", [...prefix, "uninstall", nativeId, bundleId]);
136869
137032
  } catch {
136870
137033
  }
136871
137034
  try {
136872
- await execFileAsync22("xcrun", [...prefix, "install", nativeId, absolute]);
137035
+ await execFileAsync23("xcrun", [...prefix, "install", nativeId, absolute]);
136873
137036
  } catch (err) {
136874
137037
  throw new FailureError(
136875
137038
  `Failed to install iOS app bundle on ${udid}.`,
@@ -136888,14 +137051,15 @@ var iosImpl = {
136888
137051
  };
136889
137052
 
136890
137053
  // ../tool-server/src/tools/reinstall-app/platforms/android.ts
136891
- var import_node_path17 = require("node:path");
137054
+ var import_node_path18 = require("node:path");
136892
137055
  init_src2();
136893
137056
  init_adb();
136894
137057
  var androidImpl3 = {
136895
137058
  requires: ["adb"],
136896
137059
  handler: async (_services, params) => {
136897
137060
  const { udid, bundleId, appPath } = params;
136898
- const absolute = (0, import_node_path17.resolve)(appPath);
137061
+ const absolute = (0, import_node_path18.resolve)(appPath);
137062
+ await assertApk(absolute, bundleId);
136899
137063
  try {
136900
137064
  await runAdb(["-s", udid, "uninstall", bundleId], { timeoutMs: 3e4 });
136901
137065
  } catch {
@@ -136917,7 +137081,7 @@ ${stderr}`;
136917
137081
  };
136918
137082
 
136919
137083
  // ../tool-server/src/tools/reinstall-app/platforms/ios-device.ts
136920
- var import_node_path18 = require("node:path");
137084
+ var import_node_path19 = require("node:path");
136921
137085
  var iosDeviceImpl3 = {
136922
137086
  requires: ["xcrun"],
136923
137087
  handler: async (_services, params) => {
@@ -136926,10 +137090,12 @@ var iosDeviceImpl3 = {
136926
137090
  `${params.bundleId} is system UI: it is always running and cannot be reinstalled. Use launch-app to put it under automation.`
136927
137091
  );
136928
137092
  }
137093
+ const absolute = (0, import_node_path19.resolve)(params.appPath);
137094
+ await assertIosAppBundle(absolute, params.bundleId);
136929
137095
  await ensureDeviceReady(params.udid);
136930
137096
  await uninstallApp(params.udid, params.bundleId);
136931
137097
  clearCurrentIosDeviceApp(params.udid, params.bundleId);
136932
- await installApp(params.udid, (0, import_node_path18.resolve)(params.appPath));
137098
+ await installApp(params.udid, absolute);
136933
137099
  return {
136934
137100
  reinstalled: true,
136935
137101
  bundleId: params.bundleId
@@ -136938,12 +137104,13 @@ var iosDeviceImpl3 = {
136938
137104
  };
136939
137105
 
136940
137106
  // ../tool-server/src/tools/reinstall-app/platforms/ios-remote.ts
136941
- var import_node_path19 = require("node:path");
137107
+ var import_node_path20 = require("node:path");
136942
137108
  var iosRemoteImpl3 = {
136943
137109
  requires: ["sim-remote"],
136944
137110
  handler: async (_services, params) => {
136945
137111
  const { udid, bundleId, appPath } = params;
136946
- const absolute = (0, import_node_path19.resolve)(appPath);
137112
+ const absolute = (0, import_node_path20.resolve)(appPath);
137113
+ await assertIosAppBundle(absolute, bundleId, { readBundleId: false });
136947
137114
  try {
136948
137115
  await simctlUninstall(udid, bundleId);
136949
137116
  } catch {
@@ -136954,13 +137121,14 @@ var iosRemoteImpl3 = {
136954
137121
  };
136955
137122
 
136956
137123
  // ../tool-server/src/tools/reinstall-app/platforms/vega.ts
136957
- var import_node_path20 = require("node:path");
137124
+ var import_node_path21 = require("node:path");
136958
137125
  init_src2();
136959
137126
  var vegaImpl3 = {
136960
137127
  requires: ["vega"],
136961
137128
  handler: async (_services, params) => {
136962
137129
  const { udid, bundleId, appPath } = params;
136963
- const absolute = (0, import_node_path20.resolve)(appPath);
137130
+ const absolute = (0, import_node_path21.resolve)(appPath);
137131
+ await assertVpkg(absolute);
136964
137132
  await vegaDevice(udid, ["uninstall-app", "-a", bundleId], { timeoutMs: 6e4 }).catch(
136965
137133
  () => {
136966
137134
  }
@@ -137010,7 +137178,7 @@ var reinstallAppTool = {
137010
137178
  },
137011
137179
  description: `Install or reinstall an app on the device. The previous installation (if any) is uninstalled first so app data and runtime permissions are cleared.
137012
137180
  Use for a full reinstall after rebuilding, or to start from a clean app state.
137013
- Returns { reinstalled, bundleId }. Fails if the app path does not exist or the package does not match the platform (.app for iOS, .apk for Android, .vpkg for Vega).`,
137181
+ Returns { reinstalled, bundleId }. Fails before uninstalling anything if the app path does not exist, is not the platform's package (.app for iOS, .apk for Android, .vpkg for Vega), or bundleId does not match it.`,
137014
137182
  zodSchema: zodSchema13,
137015
137183
  capability: capability5,
137016
137184
  fileInputs: [{ target: "appPath", path: "${appPath}", kind: "tar-upload" }],
@@ -137046,10 +137214,10 @@ var PERMISSION_NAMES = [
137046
137214
  ];
137047
137215
 
137048
137216
  // ../tool-server/src/tools/settings-permissions/platforms/ios.ts
137049
- var import_node_child_process30 = require("node:child_process");
137050
- var import_node_util23 = require("node:util");
137217
+ var import_node_child_process31 = require("node:child_process");
137218
+ var import_node_util24 = require("node:util");
137051
137219
  init_src2();
137052
- var execFileAsync23 = (0, import_node_util23.promisify)(import_node_child_process30.execFile);
137220
+ var execFileAsync24 = (0, import_node_util24.promisify)(import_node_child_process31.execFile);
137053
137221
  var SIMCTL_ACTION = {
137054
137222
  grant: "grant",
137055
137223
  deny: "revoke",
@@ -137074,7 +137242,7 @@ var NON_TCC_GRANT_NEEDS_INSTALL = /* @__PURE__ */ new Set([
137074
137242
  ]);
137075
137243
  var localBackend = {
137076
137244
  async run(udid, simctlAction, service, bundleId) {
137077
- await execFileAsync23(
137245
+ await execFileAsync24(
137078
137246
  "xcrun",
137079
137247
  await simctlArgsForUdid(udid, ["privacy", udid, simctlAction, service, bundleId]),
137080
137248
  { timeout: 3e4 }
@@ -137082,7 +137250,7 @@ var localBackend = {
137082
137250
  },
137083
137251
  async isInstalled(udid, bundleId) {
137084
137252
  try {
137085
- await execFileAsync23(
137253
+ await execFileAsync24(
137086
137254
  "xcrun",
137087
137255
  await simctlArgsForUdid(udid, ["get_app_container", udid, bundleId]),
137088
137256
  { timeout: 15e3 }
@@ -137365,8 +137533,8 @@ init_zod();
137365
137533
  init_device_info();
137366
137534
 
137367
137535
  // ../tool-server/src/tools/open-url/platforms/ios.ts
137368
- var import_node_child_process31 = require("node:child_process");
137369
- var import_node_util24 = require("node:util");
137536
+ var import_node_child_process32 = require("node:child_process");
137537
+ var import_node_util25 = require("node:util");
137370
137538
  init_src2();
137371
137539
 
137372
137540
  // ../tool-server/src/tools/open-url/deep-link-note.ts
@@ -137376,12 +137544,12 @@ function httpDeepLinkNote(url2) {
137376
137544
  }
137377
137545
 
137378
137546
  // ../tool-server/src/tools/open-url/platforms/ios.ts
137379
- var execFileAsync24 = (0, import_node_util24.promisify)(import_node_child_process31.execFile);
137547
+ var execFileAsync25 = (0, import_node_util25.promisify)(import_node_child_process32.execFile);
137380
137548
  var iosImpl3 = {
137381
137549
  requires: ["xcrun"],
137382
137550
  handler: async (_services, params) => {
137383
137551
  try {
137384
- await execFileAsync24(
137552
+ await execFileAsync25(
137385
137553
  "xcrun",
137386
137554
  await simctlArgsForUdid(params.udid, ["openurl", params.udid, params.url])
137387
137555
  );
@@ -137537,8 +137705,8 @@ Returns { opened, url, note? }. note carries the deep-linking caveat when a web
137537
137705
  };
137538
137706
 
137539
137707
  // ../tool-server/src/tools/screenshot/index.ts
137540
- var import_node_child_process32 = require("node:child_process");
137541
- var import_node_util25 = require("node:util");
137708
+ var import_node_child_process33 = require("node:child_process");
137709
+ var import_node_util26 = require("node:util");
137542
137710
  var os13 = __toESM(require("node:os"));
137543
137711
  var path29 = __toESM(require("node:path"));
137544
137712
  init_zod();
@@ -137901,9 +138069,9 @@ async function captureSnapshot(api, bundleId) {
137901
138069
  }
137902
138070
 
137903
138071
  // ../tool-server/src/utils/vega-screen.ts
137904
- var import_promises10 = require("node:fs/promises");
138072
+ var import_promises12 = require("node:fs/promises");
137905
138073
  var import_node_os12 = require("node:os");
137906
- var import_node_path21 = require("node:path");
138074
+ var import_node_path22 = require("node:path");
137907
138075
  var import_pngjs = __toESM(require_png());
137908
138076
  init_src2();
137909
138077
  init_adb();
@@ -138070,12 +138238,12 @@ async function captureVegaScreenshotPng(opts = {}) {
138070
138238
  async function captureViaEmulatorConsole(opts) {
138071
138239
  const port = await discoverVegaConsolePort();
138072
138240
  const serial = `emulator-${port}`;
138073
- const outDir = await (0, import_promises10.mkdtemp)((0, import_node_path21.join)((0, import_node_os12.tmpdir)(), "vega-shot-"));
138241
+ const outDir = await (0, import_promises12.mkdtemp)((0, import_node_path22.join)((0, import_node_os12.tmpdir)(), "vega-shot-"));
138074
138242
  try {
138075
138243
  await runAdb(["-s", serial, "emu", "screenrecord", "screenshot", outDir], {
138076
138244
  timeoutMs: 2e4
138077
138245
  });
138078
- const pngName = (await (0, import_promises10.readdir)(outDir)).find((f) => f.toLowerCase().endsWith(".png"));
138246
+ const pngName = (await (0, import_promises12.readdir)(outDir)).find((f) => f.toLowerCase().endsWith(".png"));
138079
138247
  if (!pngName) {
138080
138248
  throw new FailureError(`emulator console wrote no PNG to ${outDir} for ${serial}`, {
138081
138249
  error_code: FAILURE_CODES.VEGA_SCREENSHOT_FAILED,
@@ -138084,13 +138252,13 @@ async function captureViaEmulatorConsole(opts) {
138084
138252
  error_kind: "unknown"
138085
138253
  });
138086
138254
  }
138087
- const decoded = import_pngjs.PNG.sync.read(await (0, import_promises10.readFile)((0, import_node_path21.join)(outDir, pngName)));
138255
+ const decoded = import_pngjs.PNG.sync.read(await (0, import_promises12.readFile)((0, import_node_path22.join)(outDir, pngName)));
138088
138256
  const scaled = scalePng(decoded, opts.scale);
138089
- const outPath = (0, import_node_path21.join)((0, import_node_os12.tmpdir)(), `vega-screenshot-${process.hrtime.bigint()}.png`);
138090
- await (0, import_promises10.writeFile)(outPath, import_pngjs.PNG.sync.write(scaled));
138257
+ const outPath = (0, import_node_path22.join)((0, import_node_os12.tmpdir)(), `vega-screenshot-${process.hrtime.bigint()}.png`);
138258
+ await (0, import_promises12.writeFile)(outPath, import_pngjs.PNG.sync.write(scaled));
138091
138259
  return outPath;
138092
138260
  } finally {
138093
- await (0, import_promises10.rm)(outDir, { recursive: true, force: true }).catch(() => {
138261
+ await (0, import_promises12.rm)(outDir, { recursive: true, force: true }).catch(() => {
138094
138262
  });
138095
138263
  }
138096
138264
  }
@@ -138111,7 +138279,7 @@ function scalePng(src, scale) {
138111
138279
 
138112
138280
  // ../tool-server/src/tools/screenshot/index.ts
138113
138281
  var fs35 = __toESM(require("node:fs/promises"));
138114
- var execFileAsync25 = (0, import_node_util25.promisify)(import_node_child_process32.execFile);
138282
+ var execFileAsync26 = (0, import_node_util26.promisify)(import_node_child_process33.execFile);
138115
138283
  var zodSchema16 = external_exports.object({
138116
138284
  udid: external_exports.string().describe(
138117
138285
  "Target device id from `list-devices` (iOS UDID, Android serial, Apple TV UDID, Vega serial, or Chromium id)."
@@ -138152,11 +138320,11 @@ async function tvScreenshot(udid, scale, signal) {
138152
138320
  os13.tmpdir(),
138153
138321
  `argent-tv-screenshot-${udid.slice(0, 8)}-${process.hrtime.bigint()}.png`
138154
138322
  );
138155
- await execFileAsync25("xcrun", await simctlArgsForUdid(udid, ["io", udid, "screenshot", file2]), {
138323
+ await execFileAsync26("xcrun", await simctlArgsForUdid(udid, ["io", udid, "screenshot", file2]), {
138156
138324
  signal
138157
138325
  });
138158
138326
  if (scale === void 0 || scale < 1) {
138159
- await execFileAsync25("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
138327
+ await execFileAsync26("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
138160
138328
  signal
138161
138329
  }).catch(() => {
138162
138330
  });
@@ -138166,7 +138334,7 @@ async function tvScreenshot(udid, scale, signal) {
138166
138334
  async function tvTargetLongSide(file2, scale) {
138167
138335
  let longSide = 3840;
138168
138336
  try {
138169
- const { stdout } = await execFileAsync25("sips", ["-g", "pixelWidth", "-g", "pixelHeight", file2]);
138337
+ const { stdout } = await execFileAsync26("sips", ["-g", "pixelWidth", "-g", "pixelHeight", file2]);
138170
138338
  const width = Number(/pixelWidth:\s*(\d+)/.exec(stdout)?.[1]);
138171
138339
  const height = Number(/pixelHeight:\s*(\d+)/.exec(stdout)?.[1]);
138172
138340
  if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {
@@ -138201,7 +138369,7 @@ async function downscalePngInPlace(file2, scale, signal) {
138201
138369
  if (scale >= 1) {
138202
138370
  return;
138203
138371
  }
138204
- await execFileAsync25("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
138372
+ await execFileAsync26("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
138205
138373
  signal
138206
138374
  }).catch(() => {
138207
138375
  });
@@ -140252,12 +140420,12 @@ var shakeZodSchema = external_exports.object({
140252
140420
  });
140253
140421
 
140254
140422
  // ../tool-server/src/tools/shake/platforms/ios.ts
140255
- var import_node_child_process34 = require("node:child_process");
140256
- var import_node_util26 = require("node:util");
140423
+ var import_node_child_process35 = require("node:child_process");
140424
+ var import_node_util27 = require("node:util");
140257
140425
  init_src2();
140258
140426
 
140259
140427
  // ../tool-server/src/utils/window-shake.ts
140260
- var import_node_child_process33 = require("node:child_process");
140428
+ var import_node_child_process34 = require("node:child_process");
140261
140429
  init_src();
140262
140430
  var MICROINTERACTIONS_FLAG = "microinteractions";
140263
140431
  var AMPLITUDE = 22;
@@ -140364,7 +140532,7 @@ end run
140364
140532
  }
140365
140533
  function runOsascript(script) {
140366
140534
  return new Promise((resolve15, reject) => {
140367
- const child = (0, import_node_child_process33.execFile)(
140535
+ const child = (0, import_node_child_process34.execFile)(
140368
140536
  "/usr/bin/osascript",
140369
140537
  ["-"],
140370
140538
  { timeout: OSASCRIPT_TIMEOUT_MS },
@@ -140457,7 +140625,7 @@ async function prepareHostWindowShake(target) {
140457
140625
  }
140458
140626
 
140459
140627
  // ../tool-server/src/tools/shake/platforms/ios.ts
140460
- var execFileAsync26 = (0, import_node_util26.promisify)(import_node_child_process34.execFile);
140628
+ var execFileAsync27 = (0, import_node_util27.promisify)(import_node_child_process35.execFile);
140461
140629
  var SHAKE_NOTIFICATION = "com.apple.UIKit.SimulatorShake";
140462
140630
  var SHAKE_INTERVAL_MS = 400;
140463
140631
  var sleep11 = (ms) => new Promise((r) => setTimeout(r, ms));
@@ -140499,7 +140667,7 @@ var iosImpl4 = {
140499
140667
  if (i > 0) await sleep11(SHAKE_INTERVAL_MS);
140500
140668
  shaker.begin();
140501
140669
  try {
140502
- await execFileAsync26("xcrun", args, { timeout: 15e3 });
140670
+ await execFileAsync27("xcrun", args, { timeout: 15e3 });
140503
140671
  } catch (err) {
140504
140672
  const error63 = err instanceof Error ? err : new Error(String(err));
140505
140673
  throw shakeFailure(udid, error63.message, error63);
@@ -153849,8 +154017,8 @@ var import_util14 = require("util");
153849
154017
  var DEFAULT_EXEC_TIMEOUT_MS = 6e4;
153850
154018
  var DEFAULT_EXEC_MAX_BUFFER = 256 * 1024 * 1024;
153851
154019
  async function execFileAsyncWithTimeout(file2, args, options = {}) {
153852
- const execFileAsync31 = (0, import_util14.promisify)(import_child_process2.execFile);
153853
- const { stdout, stderr } = await execFileAsync31(file2, args, {
154020
+ const execFileAsync32 = (0, import_util14.promisify)(import_child_process2.execFile);
154021
+ const { stdout, stderr } = await execFileAsync32(file2, args, {
153854
154022
  encoding: "utf-8",
153855
154023
  ...options,
153856
154024
  // Applied after ...options so a caller cannot weaken the guards; maxBuffer
@@ -157894,7 +158062,7 @@ var WATERMARK_PNG_HEIGHT = 277;
157894
158062
  var WATERMARK_PNG_BASE64 = "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";
157895
158063
 
157896
158064
  // ../tool-server/src/tools/screen-recording/watermark.ts
157897
- var execFileAsync27 = (0, import_util15.promisify)(import_child_process6.execFile);
158065
+ var execFileAsync28 = (0, import_util15.promisify)(import_child_process6.execFile);
157898
158066
  var OUTPUT_FPS = 30;
157899
158067
  var FFMPEG_FALLBACK_PATHS = [
157900
158068
  "/opt/homebrew/bin/ffmpeg",
@@ -157911,7 +158079,7 @@ var MASK_DARK_MAX_LUMA = 90;
157911
158079
  var MASK_LIGHT_MIN_LUMA = 165;
157912
158080
  async function resolveBinary(name, fallbacks) {
157913
158081
  try {
157914
- await execFileAsync27("/bin/sh", ["-c", `command -v ${name}`], { timeout: 2e3 });
158082
+ await execFileAsync28("/bin/sh", ["-c", `command -v ${name}`], { timeout: 2e3 });
157915
158083
  return name;
157916
158084
  } catch {
157917
158085
  }
@@ -158583,7 +158751,7 @@ function makePointerControl(simulator) {
158583
158751
  }
158584
158752
 
158585
158753
  // ../tool-server/src/tools/screen-recording/screen-recording-stop.ts
158586
- var import_node_path22 = require("node:path");
158754
+ var import_node_path23 = require("node:path");
158587
158755
  init_zod();
158588
158756
  init_device_info();
158589
158757
  var zodSchema57 = external_exports.object({
@@ -158623,7 +158791,7 @@ Fails if no recording (running or finished-but-unretrieved) exists for the given
158623
158791
  kind: "screen-recording",
158624
158792
  mimeType: "video/mp4",
158625
158793
  // Drop the internal `argent-` temp-file prefix from the saved name.
158626
- filename: (0, import_node_path22.basename)(stopped.outputFile).replace(/^argent-/, ""),
158794
+ filename: (0, import_node_path23.basename)(stopped.outputFile).replace(/^argent-/, ""),
158627
158795
  saveDir: RECORDINGS_DIR
158628
158796
  });
158629
158797
  const result = { video, durationMs: stopped.durationMs };
@@ -160717,7 +160885,7 @@ Returns { stopped } - the URNs of the services that were actually live and got s
160717
160885
 
160718
160886
  // ../tool-server/src/tools/simulator/stop-metro.ts
160719
160887
  init_zod();
160720
- var import_node_child_process35 = require("node:child_process");
160888
+ var import_node_child_process36 = require("node:child_process");
160721
160889
  function parseNetstatListeningPids(netstatOutput, port) {
160722
160890
  const pids = /* @__PURE__ */ new Set();
160723
160891
  for (const line of netstatOutput.split(/\r?\n/)) {
@@ -160733,7 +160901,7 @@ function parseNetstatListeningPids(netstatOutput, port) {
160733
160901
  }
160734
160902
  function listeningPids(port) {
160735
160903
  if (process.platform === "win32") {
160736
- const output3 = (0, import_node_child_process35.execFileSync)("netstat", ["-ano"], {
160904
+ const output3 = (0, import_node_child_process36.execFileSync)("netstat", ["-ano"], {
160737
160905
  encoding: "utf-8",
160738
160906
  timeout: 5e3,
160739
160907
  // `netstat -ano` dumps every socket on the host; overflowing Node's
@@ -160742,7 +160910,7 @@ function listeningPids(port) {
160742
160910
  });
160743
160911
  return parseNetstatListeningPids(output3, port);
160744
160912
  }
160745
- const output2 = (0, import_node_child_process35.execFileSync)("lsof", ["-ti", `tcp:${port}`, "-sTCP:LISTEN"], {
160913
+ const output2 = (0, import_node_child_process36.execFileSync)("lsof", ["-ti", `tcp:${port}`, "-sTCP:LISTEN"], {
160746
160914
  encoding: "utf-8",
160747
160915
  timeout: 5e3
160748
160916
  }).trim();
@@ -166355,7 +166523,7 @@ var import_node_url4 = require("node:url");
166355
166523
  init_src2();
166356
166524
 
166357
166525
  // ../tool-server/src/tools/flows/script/flow-script-executor.ts
166358
- var import_node_child_process36 = require("node:child_process");
166526
+ var import_node_child_process37 = require("node:child_process");
166359
166527
  var fs58 = __toESM(require("node:fs"));
166360
166528
  var os17 = __toESM(require("node:os"));
166361
166529
  var path44 = __toESM(require("node:path"));
@@ -166740,7 +166908,7 @@ var FlowScriptExecutor = class {
166740
166908
  detached: process.platform !== "win32",
166741
166909
  windowsHide: process.platform === "win32"
166742
166910
  };
166743
- child = (0, import_node_child_process36.fork)(scriptPath, [], forkOptions);
166911
+ child = (0, import_node_child_process37.fork)(scriptPath, [], forkOptions);
166744
166912
  } catch (err) {
166745
166913
  return emptyResult(
166746
166914
  { kind: "spawn", message: `Could not start the script process: ${errorMessage(err)}` },
@@ -167181,7 +167349,7 @@ async function stopProcessTree(child, graceMs) {
167181
167349
  if (process.platform === "win32") {
167182
167350
  if (hasExited(child)) return;
167183
167351
  tryKill(() => {
167184
- const killer = (0, import_node_child_process36.spawn)("taskkill", ["/pid", String(pid), "/t", "/f"], {
167352
+ const killer = (0, import_node_child_process37.spawn)("taskkill", ["/pid", String(pid), "/t", "/f"], {
167185
167353
  windowsHide: true,
167186
167354
  stdio: "ignore"
167187
167355
  });
@@ -167350,9 +167518,9 @@ var ScriptLogCapture = class {
167350
167518
  };
167351
167519
  function withoutPartialMarker(buffer, taken) {
167352
167520
  const text = buffer.subarray(0, taken).toString("utf8");
167353
- const open3 = text.lastIndexOf(SECRET_PLACEHOLDER_MARKER);
167354
- if (open3 >= 0 && !text.includes("}}", open3 + SECRET_PLACEHOLDER_MARKER.length)) {
167355
- return Buffer.byteLength(text.slice(0, open3), "utf8");
167521
+ const open4 = text.lastIndexOf(SECRET_PLACEHOLDER_MARKER);
167522
+ if (open4 >= 0 && !text.includes("}}", open4 + SECRET_PLACEHOLDER_MARKER.length)) {
167523
+ return Buffer.byteLength(text.slice(0, open4), "utf8");
167356
167524
  }
167357
167525
  for (let n = Math.min(SECRET_PLACEHOLDER_MARKER.length - 1, text.length); n > 0; n--) {
167358
167526
  if (text.endsWith(SECRET_PLACEHOLDER_MARKER.slice(0, n))) return taken - n;
@@ -167584,8 +167752,8 @@ function scriptRan(result) {
167584
167752
  }
167585
167753
  async function scriptFileProblem(canonical) {
167586
167754
  try {
167587
- const stat6 = await fs59.stat(canonical);
167588
- return stat6.isFile() ? null : "is not a file";
167755
+ const stat7 = await fs59.stat(canonical);
167756
+ return stat7.isFile() ? null : "is not a file";
167589
167757
  } catch (err) {
167590
167758
  const code = err.code;
167591
167759
  return code === "ENOENT" || code === "ENOTDIR" ? "does not exist" : `cannot be read: ${errMsg3(err)}`;
@@ -167893,7 +168061,7 @@ var import_pngjs4 = __toESM(require_png());
167893
168061
  init_src2();
167894
168062
 
167895
168063
  // ../tool-server/src/tools/screenshot-diff/screenshot-diff.ts
167896
- var import_promises11 = __toESM(require("fs/promises"));
168064
+ var import_promises13 = __toESM(require("fs/promises"));
167897
168065
  var import_path7 = __toESM(require("path"));
167898
168066
  var import_pngjs3 = __toESM(require_png());
167899
168067
  init_src2();
@@ -167901,7 +168069,7 @@ init_src2();
167901
168069
  // ../tool-server/src/tools/screenshot-diff/screenshot-diff-ocr.ts
167902
168070
  var import_child_process8 = require("child_process");
167903
168071
  var import_util16 = require("util");
167904
- var execFileAsync28 = (0, import_util16.promisify)(import_child_process8.execFile);
168072
+ var execFileAsync29 = (0, import_util16.promisify)(import_child_process8.execFile);
167905
168073
  var OCR_TIMEOUT_MS = 1e4;
167906
168074
  var OCR_MAX_BUFFER_BYTES = 32 * 1024 * 1024;
167907
168075
  var TESSERACT_BINARY = "tesseract";
@@ -167946,7 +168114,7 @@ async function extractOcrTextBlocks(imagePath) {
167946
168114
  }
167947
168115
  }
167948
168116
  async function recognizeTsv(imagePath) {
167949
- const { stdout } = await execFileAsync28(
168117
+ const { stdout } = await execFileAsync29(
167950
168118
  TESSERACT_BINARY,
167951
168119
  [
167952
168120
  imagePath,
@@ -169638,7 +169806,7 @@ async function writeDiffArtifacts(params) {
169638
169806
  }
169639
169807
  async function decodePngFile(filePath) {
169640
169808
  try {
169641
- const buffer = await import_promises11.default.readFile(filePath);
169809
+ const buffer = await import_promises13.default.readFile(filePath);
169642
169810
  const png = import_pngjs3.PNG.sync.read(buffer);
169643
169811
  return {
169644
169812
  width: png.width,
@@ -169693,8 +169861,8 @@ function luminanceFromOffset(data, offset) {
169693
169861
  return 0.2126 * data[offset] + 0.7152 * data[offset + 1] + 0.0722 * data[offset + 2];
169694
169862
  }
169695
169863
  async function writePngFile(filePath, png) {
169696
- await import_promises11.default.mkdir(import_path7.default.dirname(filePath), { recursive: true });
169697
- await import_promises11.default.writeFile(filePath, import_pngjs3.PNG.sync.write(png));
169864
+ await import_promises13.default.mkdir(import_path7.default.dirname(filePath), { recursive: true });
169865
+ await import_promises13.default.writeFile(filePath, import_pngjs3.PNG.sync.write(png));
169698
169866
  }
169699
169867
  function downscalePng(source, scale) {
169700
169868
  const resized = resizeDecodedPng(
@@ -170228,11 +170396,11 @@ async function runSnapshot(env, opts) {
170228
170396
  }
170229
170397
 
170230
170398
  // ../tool-server/src/utils/status-bar.ts
170231
- var import_node_child_process37 = require("node:child_process");
170232
- var import_node_util27 = require("node:util");
170399
+ var import_node_child_process38 = require("node:child_process");
170400
+ var import_node_util28 = require("node:util");
170233
170401
  init_adb();
170234
170402
  init_device_info();
170235
- var execFileAsync29 = (0, import_node_util27.promisify)(import_node_child_process37.execFile);
170403
+ var execFileAsync30 = (0, import_node_util28.promisify)(import_node_child_process38.execFile);
170236
170404
  var DEMO_BROADCAST = "am broadcast -a com.android.systemui.demo";
170237
170405
  var IOS_STATUS_BAR_OVERRIDE = [
170238
170406
  "override",
@@ -170256,7 +170424,7 @@ async function pinStatusBar(device, signal) {
170256
170424
  if (isIosPhysicalDevice(device)) return false;
170257
170425
  try {
170258
170426
  if (device.platform === "ios") {
170259
- await execFileAsync29(
170427
+ await execFileAsync30(
170260
170428
  "xcrun",
170261
170429
  await simctlArgsForUdid(device.id, ["status_bar", device.id, ...IOS_STATUS_BAR_OVERRIDE])
170262
170430
  );
@@ -170292,7 +170460,7 @@ async function pinStatusBar(device, signal) {
170292
170460
  async function restoreStatusBar(device) {
170293
170461
  try {
170294
170462
  if (device.platform === "ios") {
170295
- await execFileAsync29(
170463
+ await execFileAsync30(
170296
170464
  "xcrun",
170297
170465
  await simctlArgsForUdid(device.id, ["status_bar", device.id, "clear"])
170298
170466
  );
@@ -171875,13 +172043,13 @@ Address the flow exactly as you will address it in flow-execute: name or flow_pa
171875
172043
  init_zod();
171876
172044
 
171877
172045
  // ../tool-server/src/utils/workspace-reader.ts
171878
- var import_promises12 = require("node:fs/promises");
171879
- var import_node_path23 = require("node:path");
171880
- var import_node_child_process38 = require("node:child_process");
172046
+ var import_promises14 = require("node:fs/promises");
172047
+ var import_node_path24 = require("node:path");
172048
+ var import_node_child_process39 = require("node:child_process");
171881
172049
  var import_dotenv2 = __toESM(require_main());
171882
172050
  async function exists(path53) {
171883
172051
  try {
171884
- await (0, import_promises12.access)(path53);
172052
+ await (0, import_promises14.access)(path53);
171885
172053
  return true;
171886
172054
  } catch {
171887
172055
  return false;
@@ -171889,7 +172057,7 @@ async function exists(path53) {
171889
172057
  }
171890
172058
  async function isDirectory(path53) {
171891
172059
  try {
171892
- const s = await (0, import_promises12.stat)(path53);
172060
+ const s = await (0, import_promises14.stat)(path53);
171893
172061
  return s.isDirectory();
171894
172062
  } catch {
171895
172063
  return false;
@@ -171897,7 +172065,7 @@ async function isDirectory(path53) {
171897
172065
  }
171898
172066
  async function readJsonFile(path53) {
171899
172067
  try {
171900
- const raw = await (0, import_promises12.readFile)(path53, "utf-8");
172068
+ const raw = await (0, import_promises14.readFile)(path53, "utf-8");
171901
172069
  return JSON.parse(raw);
171902
172070
  } catch {
171903
172071
  return null;
@@ -171905,14 +172073,14 @@ async function readJsonFile(path53) {
171905
172073
  }
171906
172074
  async function readTextFile(path53) {
171907
172075
  try {
171908
- return await (0, import_promises12.readFile)(path53, "utf-8");
172076
+ return await (0, import_promises14.readFile)(path53, "utf-8");
171909
172077
  } catch {
171910
172078
  return null;
171911
172079
  }
171912
172080
  }
171913
172081
  async function listDir(path53) {
171914
172082
  try {
171915
- const entries = await (0, import_promises12.readdir)(path53);
172083
+ const entries = await (0, import_promises14.readdir)(path53);
171916
172084
  return entries;
171917
172085
  } catch {
171918
172086
  return null;
@@ -171921,7 +172089,7 @@ async function listDir(path53) {
171921
172089
  var COMMAND_TIMEOUT_MS = 3e3;
171922
172090
  function runVersionCommand(cmd, args, cwd) {
171923
172091
  return new Promise((resolve15) => {
171924
- const child = (0, import_node_child_process38.execFile)(cmd, args, { cwd, timeout: COMMAND_TIMEOUT_MS }, (err, stdout) => {
172092
+ const child = (0, import_node_child_process39.execFile)(cmd, args, { cwd, timeout: COMMAND_TIMEOUT_MS }, (err, stdout) => {
171925
172093
  if (err) {
171926
172094
  resolve15(null);
171927
172095
  return;
@@ -171964,7 +172132,7 @@ async function detectLockfile(workspacePath) {
171964
172132
  const checks = await Promise.all(
171965
172133
  LOCKFILES.map(async (name) => ({
171966
172134
  name,
171967
- exists: await exists((0, import_node_path23.join)(workspacePath, name))
172135
+ exists: await exists((0, import_node_path24.join)(workspacePath, name))
171968
172136
  }))
171969
172137
  );
171970
172138
  return checks.find((c) => c.exists)?.name ?? null;
@@ -171983,7 +172151,7 @@ var CI_CONFIGS = [
171983
172151
  ];
171984
172152
  async function detectCiConfig(workspacePath) {
171985
172153
  for (const ci of CI_CONFIGS) {
171986
- if (await exists((0, import_node_path23.join)(workspacePath, ci.path))) return ci.label;
172154
+ if (await exists((0, import_node_path24.join)(workspacePath, ci.path))) return ci.label;
171987
172155
  }
171988
172156
  return null;
171989
172157
  }
@@ -172004,7 +172172,7 @@ async function detectLintStagedConfig(workspacePath, packageJson) {
172004
172172
  return packageJson["lint-staged"];
172005
172173
  }
172006
172174
  for (const file2 of LINT_STAGED_FILES) {
172007
- const full = (0, import_node_path23.join)(workspacePath, file2);
172175
+ const full = (0, import_node_path24.join)(workspacePath, file2);
172008
172176
  if (await exists(full)) {
172009
172177
  if (file2.endsWith(".json") || file2 === ".lintstagedrc") {
172010
172178
  return readJsonFile(full);
@@ -172046,7 +172214,7 @@ var CONFIG_FILES = [
172046
172214
  async function detectConfigFiles(workspacePath) {
172047
172215
  const results = await Promise.allSettled(
172048
172216
  CONFIG_FILES.map(async (file2) => {
172049
- if (await exists((0, import_node_path23.join)(workspacePath, file2))) return file2;
172217
+ if (await exists((0, import_node_path24.join)(workspacePath, file2))) return file2;
172050
172218
  return null;
172051
172219
  })
172052
172220
  );
@@ -172085,7 +172253,7 @@ async function detectEnvFiles(workspacePath) {
172085
172253
  const envFileNames = entries.filter((e) => e === ".env" || e.startsWith(".env."));
172086
172254
  const results = await Promise.all(
172087
172255
  envFileNames.map(async (name) => {
172088
- const content = await readTextFile((0, import_node_path23.join)(workspacePath, name));
172256
+ const content = await readTextFile((0, import_node_path24.join)(workspacePath, name));
172089
172257
  return {
172090
172258
  name,
172091
172259
  keys: content ? extractEnvKeys(content) : []
@@ -172112,34 +172280,34 @@ async function readWorkspaceSnapshot(workspacePath) {
172112
172280
  ciConfig,
172113
172281
  configFilesFound
172114
172282
  ] = await Promise.all([
172115
- readJsonFile((0, import_node_path23.join)(workspacePath, "package.json")),
172116
- readJsonFile((0, import_node_path23.join)(workspacePath, "app.json")),
172117
- readJsonFile((0, import_node_path23.join)(workspacePath, "eas.json")),
172118
- readJsonFile((0, import_node_path23.join)(workspacePath, "tsconfig.json")),
172119
- readTextFile((0, import_node_path23.join)(workspacePath, "metro.config.js")).then(
172120
- (r) => r ?? readTextFile((0, import_node_path23.join)(workspacePath, "metro.config.ts"))
172283
+ readJsonFile((0, import_node_path24.join)(workspacePath, "package.json")),
172284
+ readJsonFile((0, import_node_path24.join)(workspacePath, "app.json")),
172285
+ readJsonFile((0, import_node_path24.join)(workspacePath, "eas.json")),
172286
+ readJsonFile((0, import_node_path24.join)(workspacePath, "tsconfig.json")),
172287
+ readTextFile((0, import_node_path24.join)(workspacePath, "metro.config.js")).then(
172288
+ (r) => r ?? readTextFile((0, import_node_path24.join)(workspacePath, "metro.config.ts"))
172121
172289
  ),
172122
- readTextFile((0, import_node_path23.join)(workspacePath, "babel.config.js")).then(
172123
- (r) => r ?? readTextFile((0, import_node_path23.join)(workspacePath, "babel.config.cjs"))
172290
+ readTextFile((0, import_node_path24.join)(workspacePath, "babel.config.js")).then(
172291
+ (r) => r ?? readTextFile((0, import_node_path24.join)(workspacePath, "babel.config.cjs"))
172124
172292
  ),
172125
- isDirectory((0, import_node_path23.join)(workspacePath, "ios")),
172126
- isDirectory((0, import_node_path23.join)(workspacePath, "android")),
172293
+ isDirectory((0, import_node_path24.join)(workspacePath, "ios")),
172294
+ isDirectory((0, import_node_path24.join)(workspacePath, "android")),
172127
172295
  detectLockfile(workspacePath),
172128
172296
  detectEnvFiles(workspacePath),
172129
172297
  detectToolVersions(workspacePath),
172130
- listDir((0, import_node_path23.join)(workspacePath, "scripts")),
172131
- listDir((0, import_node_path23.join)(workspacePath, ".husky")),
172298
+ listDir((0, import_node_path24.join)(workspacePath, "scripts")),
172299
+ listDir((0, import_node_path24.join)(workspacePath, ".husky")),
172132
172300
  detectCiConfig(workspacePath),
172133
172301
  detectConfigFiles(workspacePath)
172134
172302
  ]);
172135
- const iosDir = (0, import_node_path23.join)(workspacePath, "ios");
172136
- const androidDir = (0, import_node_path23.join)(workspacePath, "android");
172303
+ const iosDir = (0, import_node_path24.join)(workspacePath, "ios");
172304
+ const androidDir = (0, import_node_path24.join)(workspacePath, "android");
172137
172305
  const [iosWorkspace, iosHasPodfile, makefileText, lintStagedConfig, androidHasGradle] = await Promise.all([
172138
172306
  hasIosDir ? findIosWorkspace(iosDir) : Promise.resolve(null),
172139
- exists((0, import_node_path23.join)(workspacePath, "ios", "Podfile")),
172140
- readTextFile((0, import_node_path23.join)(workspacePath, "Makefile")),
172307
+ exists((0, import_node_path24.join)(workspacePath, "ios", "Podfile")),
172308
+ readTextFile((0, import_node_path24.join)(workspacePath, "Makefile")),
172141
172309
  detectLintStagedConfig(workspacePath, packageJson),
172142
- hasAndroidDir ? exists((0, import_node_path23.join)(androidDir, "gradlew")) : Promise.resolve(false)
172310
+ hasAndroidDir ? exists((0, import_node_path24.join)(androidDir, "gradlew")) : Promise.resolve(false)
172143
172311
  ]);
172144
172312
  const metroPort2 = metroConfigRaw ? extractMetroPort(metroConfigRaw) : null;
172145
172313
  const makefileTargets = makefileText ? extractMakefileTargets(makefileText) : null;
@@ -172210,7 +172378,7 @@ Fails if the workspacePath is not an absolute path or the directory cannot be ac
172210
172378
  };
172211
172379
 
172212
172380
  // ../tool-server/src/tools/system/update-argent.ts
172213
- var import_node_child_process39 = require("node:child_process");
172381
+ var import_node_child_process40 = require("node:child_process");
172214
172382
  var fs65 = __toESM(require("node:fs"));
172215
172383
  var path49 = __toESM(require("node:path"));
172216
172384
  init_zod();
@@ -172345,7 +172513,7 @@ var updateArgentTool = {
172345
172513
  if (spawnRoot) updateArgs.push("--project-root", spawnRoot);
172346
172514
  const cmd = cliEntry ? process.execPath : "argent";
172347
172515
  const args = cliEntry ? [cliEntry, ...updateArgs] : updateArgs;
172348
- const child = (0, import_node_child_process39.spawn)(cmd, args, {
172516
+ const child = (0, import_node_child_process40.spawn)(cmd, args, {
172349
172517
  detached: true,
172350
172518
  stdio: "ignore",
172351
172519
  env: { ...process.env, ARGENT_UPDATE_TRIGGER: "mcp_update" }
@@ -172398,7 +172566,7 @@ var dismissUpdateTool = {
172398
172566
 
172399
172567
  // ../tool-server/src/tools/screenshot-diff/index.ts
172400
172568
  var import_node_crypto13 = __toESM(require("node:crypto"));
172401
- var import_promises13 = __toESM(require("fs/promises"));
172569
+ var import_promises15 = __toESM(require("fs/promises"));
172402
172570
  var import_node_os13 = __toESM(require("node:os"));
172403
172571
  var import_path8 = __toESM(require("path"));
172404
172572
  init_zod();
@@ -172530,7 +172698,7 @@ async function resolveOutputDir(params, options) {
172530
172698
  }
172531
172699
  if (params.outputDir) {
172532
172700
  try {
172533
- await import_promises13.default.mkdir(params.outputDir);
172701
+ await import_promises15.default.mkdir(params.outputDir);
172534
172702
  return params.outputDir;
172535
172703
  } catch (err) {
172536
172704
  if (err.code === "EEXIST") return params.outputDir;
@@ -172541,7 +172709,7 @@ async function resolveOutputDir(params, options) {
172541
172709
  "argent-screenshot-diff",
172542
172710
  import_node_crypto13.default.randomBytes(6).toString("hex")
172543
172711
  );
172544
- await import_promises13.default.mkdir(dir, { recursive: true });
172712
+ await import_promises15.default.mkdir(dir, { recursive: true });
172545
172713
  return dir;
172546
172714
  }
172547
172715
  async function resolveInputPaths(services, params, outputDir, options, captureScreenshot2, peekFor) {
@@ -172631,8 +172799,8 @@ async function captureIosDeviceLiveInput(params) {
172631
172799
  const png = await captureRunnerScreenshotPng(params.runner, RUNNER_COMMAND_TIMEOUT_MS);
172632
172800
  const suffix = import_node_crypto13.default.randomBytes(4).toString("hex");
172633
172801
  const destination = import_path8.default.join(params.outputDir, `${params.name}-${suffix}.live.png`);
172634
- await import_promises13.default.mkdir(params.outputDir, { recursive: true });
172635
- await import_promises13.default.writeFile(destination, png);
172802
+ await import_promises15.default.mkdir(params.outputDir, { recursive: true });
172803
+ await import_promises15.default.writeFile(destination, png);
172636
172804
  return destination;
172637
172805
  }
172638
172806
  async function captureLiveInput(params) {
@@ -172662,8 +172830,8 @@ async function captureLiveInput(params) {
172662
172830
  }
172663
172831
  const suffix = import_node_crypto13.default.randomBytes(4).toString("hex");
172664
172832
  const destination = import_path8.default.join(params.outputDir, `${params.name}-${suffix}.live.png`);
172665
- await import_promises13.default.mkdir(params.outputDir, { recursive: true });
172666
- await import_promises13.default.copyFile(capture.path, destination);
172833
+ await import_promises15.default.mkdir(params.outputDir, { recursive: true });
172834
+ await import_promises15.default.copyFile(capture.path, destination);
172667
172835
  return {
172668
172836
  path: destination,
172669
172837
  ...panel?.warning !== void 0 ? { warning: panel.warning } : {}
@@ -173379,13 +173547,13 @@ function probeArgentToolServer(host, port, timeoutMs = 500) {
173379
173547
 
173380
173548
  // ../tool-server/src/utils/simulator-watcher.ts
173381
173549
  var fs67 = __toESM(require("node:fs"));
173382
- var import_node_child_process40 = require("node:child_process");
173383
- var import_node_util28 = require("node:util");
173550
+ var import_node_child_process41 = require("node:child_process");
173551
+ var import_node_util29 = require("node:util");
173384
173552
  init_external_devices();
173385
- var execFileAsync30 = (0, import_node_util28.promisify)(import_node_child_process40.execFile);
173553
+ var execFileAsync31 = (0, import_node_util29.promisify)(import_node_child_process41.execFile);
173386
173554
  var POLL_INTERVAL_MS2 = 1e4;
173387
173555
  async function getBootedUdidsInSet(deviceSet) {
173388
- const { stdout } = await execFileAsync30("xcrun", [
173556
+ const { stdout } = await execFileAsync31("xcrun", [
173389
173557
  ...simctlPrefix(deviceSet),
173390
173558
  "list",
173391
173559
  "devices",
@@ -173504,7 +173672,7 @@ function startSimulatorWatcher(registry2) {
173504
173672
  }
173505
173673
 
173506
173674
  // ../tool-server/src/utils/preview-window.ts
173507
- var import_node_child_process41 = require("node:child_process");
173675
+ var import_node_child_process42 = require("node:child_process");
173508
173676
  var fs68 = __toESM(require("node:fs"));
173509
173677
  var os20 = __toESM(require("node:os"));
173510
173678
  var path51 = __toESM(require("node:path"));
@@ -173536,10 +173704,10 @@ function ensureLensAppBundle(electronBin) {
173536
173704
  fs68.copyFileSync(path51.join(realContents, "Info.plist"), plist);
173537
173705
  const setPlist = (entry, value) => {
173538
173706
  try {
173539
- (0, import_node_child_process41.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Set :${entry} ${value}`, plist]);
173707
+ (0, import_node_child_process42.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Set :${entry} ${value}`, plist]);
173540
173708
  } catch {
173541
173709
  try {
173542
- (0, import_node_child_process41.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Add :${entry} string ${value}`, plist]);
173710
+ (0, import_node_child_process42.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Add :${entry} string ${value}`, plist]);
173543
173711
  } catch {
173544
173712
  }
173545
173713
  }
@@ -173598,7 +173766,7 @@ function createPreviewWindowManager(opts = {}) {
173598
173766
  const wrapperBin = ensureLensAppBundle(electronBin);
173599
173767
  const launchBin = wrapperBin ?? electronBin;
173600
173768
  const launchArgs = wrapperBin ? ["--no-sandbox", mainScript] : [mainScript];
173601
- const next = (0, import_node_child_process41.spawn)(launchBin, launchArgs, {
173769
+ const next = (0, import_node_child_process42.spawn)(launchBin, launchArgs, {
173602
173770
  // Strips ELECTRON_RUN_AS_NODE, which an Electron-based MCP host leaves in
173603
173771
  // our env, so the child boots as a GUI app instead of bare Node.
173604
173772
  env: electronGuiChildEnv({ ARGENT_PREVIEW_URL: url2 }),